{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import scipy \n",
    "import random\n",
    "import math\n",
    "import csv\n",
    "from scipy.stats import poisson \n",
    "import matplotlib as mpl\n",
    "from matplotlib import colors as mpl_colors\n",
    "import matplotlib\n",
    "from scipy.stats import ttest_rel"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Set the pars and import the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "N_all = 4096\n",
    "N = 64\n",
    "n_tasks = 4\n",
    "n_latent = 4\n",
    "missing_exp = True\n",
    "epochs = 500\n",
    "plot_interpolation = \"None\"\n",
    "inputs_dimension = 6\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "outputs = np.loadtxt('../Data/btb_experiments/outputs_BTB')\n",
    "inputs = np.loadtxt('../Data/btb_experiments/inputs_BTB')\n",
    "cell_inside = np.loadtxt('../Data/btb_experiments/cell_inside.csv')\n",
    "surfaces_mLGCP_BTB = np.loadtxt('../Data/btb_experiments/surfaces_mLGCP_BTB')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "rotated = list(reversed(zip(*cell_inside)))\n",
    "matrix_rotated1 = np.zeros((N,N))\n",
    "for i in  xrange(len(rotated)):\n",
    "    matrix_rotated1[i,:] = rotated[i]\n",
    "cell_inside = matrix_rotated1\n",
    "cell_inside[cell_inside == 0] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import outputs with missing data\n",
    "data_final_with_NOna = outputs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Import predictions for missing data exps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# If use covariates need to change this\n",
    "method = 'MCPM'\n",
    "prior_mixing_weights = 'Normal'\n",
    "missing_exp = True \n",
    "n_folds = 16\n",
    "n_missing_values = N_all/16\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_dataset_MT_Normal = np.load('../Data/btb_experiments/'+ 'final_dataset_'+ prior_mixing_weights + \"_\" + 'MCPM' + \"_\" + str(missing_exp)+ \".npy\")\n",
    "latent_means_MT_Normal = np.load('../Data/btb_experiments/' + 'latent_means_'+ prior_mixing_weights + \"_\" + 'MCPM' + \"_\" + str(missing_exp)+ \".npy\")\n",
    "latent_vars_MT_Normal = np.load('../Data/btb_experiments/' + 'latent_variances_'+ prior_mixing_weights + \"_\" + 'MCPM' + \"_\" + str(missing_exp)+ \".npy\")\n",
    "means_w_MT_Normal = np.load('../Data/btb_experiments/' + 'means_weights_'+ prior_mixing_weights + \"_\" + 'MCPM' + \"_\" + str(missing_exp)+ \".npy\")\n",
    "vars_w_MT_Normal = np.load('../Data/btb_experiments/' + 'covars_weights_'+ prior_mixing_weights + \"_\" + 'MCPM' + \"_\" + str(missing_exp)+ \".npy\")\n",
    "offsets_MT_Normal = np.load('../Data/btb_experiments/' + 'offsets_'+ prior_mixing_weights + \"_\" + 'MCPM' + \"_\" + str(missing_exp)+ \".npy\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "method = 'LGCP'\n",
    "prior_mixing_weights = 'Normal'\n",
    "missing_exp = True \n",
    "n_folds = 16\n",
    "n_missing_values = N_all/16\n",
    "\n",
    "final_dataset_ST_Normal = np.load('../Data/btb_experiments/'+ 'final_dataset_'+ prior_mixing_weights + \"_\" + 'MCPM' + \"_\" + str(missing_exp)+ \".npy\")\n",
    "latent_means_ST_Normal = np.load('../Data/btb_experiments/' + 'latent_means_'+ prior_mixing_weights + \"_\" + 'MCPM' + \"_\" + str(missing_exp)+ \".npy\")\n",
    "latent_vars_ST_Normal = np.load('../Data/btb_experiments/' + 'latent_variances_'+ prior_mixing_weights + \"_\" + 'MCPM' + \"_\" + str(missing_exp)+ \".npy\")\n",
    "means_w_ST_Normal = np.load('../Data/btb_experiments/' + 'means_weights_'+ prior_mixing_weights + \"_\" + 'MCPM' + \"_\" + str(missing_exp)+ \".npy\")\n",
    "vars_w_ST_Normal = np.load('../Data/btb_experiments/' + 'covars_weights_'+ prior_mixing_weights + \"_\" + 'MCPM' + \"_\" + str(missing_exp)+ \".npy\")\n",
    "offsets_ST_Normal = np.load('../Data/btb_experiments/' + 'offsets_'+ prior_mixing_weights + \"_\" + 'MCPM' + \"_\" + str(missing_exp)+ \".npy\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(16, 4096, 10)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import outputs with missing data\n",
    "n_folds = 16\n",
    "method = 'MT'\n",
    "prior_mixing_weights = 'Normal'\n",
    "missing_exp = True\n",
    "data_final_with_na = np.loadtxt('../Data/btb_experiments/' + 'data_final_with_na_'+ prior_mixing_weights + \"_\" + method+ \"_\" + str(missing_exp)).reshape(n_folds, N_all, n_tasks + inputs_dimension)\n",
    "data_final_with_na.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_NA = data_final_with_na[:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "fold = 0\n",
    "na_data = np.zeros((n_tasks, N, N))\n",
    "masked_array = np.zeros((n_tasks, N, N))\n",
    "im = [None] * n_tasks\n",
    "for t in xrange(n_tasks):\n",
    "    na_data[t] = data_NA[fold,:,t+inputs_dimension].reshape(N,N)\n",
    "    na_data[t][~np.isnan(na_data[t])] =  0\n",
    "    na_data[t][np.isnan(na_data[t])] = 1\n",
    "    na_data[t][na_data[t] == 0] =  np.nan\n",
    "    \n",
    "    masked_array[t] = np.ma.array(na_data[t], mask=np.isnan(data_final_with_na[fold,:,t+inputs_dimension].reshape(N,N)))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, 3.5, 7]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bounds = [None] * n_tasks\n",
    "for t in xrange(n_tasks):\n",
    "    bounds[t] = [0,np.max(data_final_with_NOna[:,t])/2, int(np.max(data_final_with_NOna[:,t]))]\n",
    "bounds[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Plot the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1980x432 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fold = 0\n",
    "cmap = \"gist_heat_r\"\n",
    "mpl.rcParams.update({'font.size': 20})\n",
    "size_cbar_ticks = 18\n",
    "transparency = 0.5\n",
    "shrink = 0.8\n",
    "pad=0.05\n",
    "rescale = 0.2\n",
    "cmap1 = mpl.cm.gray\n",
    "cmap1.set_bad('white',alpha = 0.0)\n",
    "\n",
    "xmin, xmax, ymin, ymax = np.amin(data_final_with_na[fold,:,1]), np.amax(data_final_with_na[fold,:,1]), np.amin(data_final_with_na[fold,:,0]), np.amax(data_final_with_na[fold,:,0])\n",
    "extent = xmin, xmax, ymin, ymax\n",
    "\n",
    "fig, axs = plt.subplots(1,4, sharex = 'col', sharey = 'row')\n",
    "fig.set_figheight(6)\n",
    "fig.set_figwidth(27.5)\n",
    "fig.subplots_adjust(hspace=0.2)\n",
    "fig.subplots_adjust(wspace=0.02)\n",
    "\n",
    "axs = axs.ravel()\n",
    "\n",
    "for i in range(4):\n",
    "#         print('i', i)\n",
    "        color_max = np.amax((((data_final_with_NOna[:,i])[~np.isnan(data_final_with_NOna[:,i])])))\n",
    "        color_min = np.amin((((data_final_with_NOna[:,i])[~np.isnan(data_final_with_NOna[:,i])])))\n",
    "#         print('color_max', color_max)\n",
    "#         print('color_min', color_min)\n",
    "        color_min = color_min - rescale\n",
    "        \n",
    "        im[i] = axs[i].imshow(data_final_with_NOna[:, i].reshape(N,N)*cell_inside, extent=extent, \n",
    "                 aspect = 'auto', cmap=cmap, interpolation='None',\n",
    "                 vmin = color_min, vmax = color_max)\n",
    "        \n",
    "        #axs[i].imshow(masked_array[i], interpolation='nearest', cmap = cmap1, alpha = transparency,\n",
    "        #  extent=extent)\n",
    "        \n",
    "        #axs[i].title.set_text(crime_list_name[i])\n",
    "        \n",
    "\n",
    "        #b = bounds[i]\n",
    "        #cbar = plt.colorbar(im[i], ax = axs[i],orientation=\"horizontal\", pad=pad, shrink = shrink, ticks = b)\n",
    "        #cbar.ax.tick_params(labelsize=size_cbar_ticks)\n",
    "\n",
    "#         axs[i].set_yticks([])\n",
    "#         axs[i].set_xticks([])         \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Estimated surfaces ST"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1512x216 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fold = 0\n",
    "mpl.rcParams.update({'font.size': 12.8})\n",
    "size_cbar_ticks = 15\n",
    "rescale = 20\n",
    "\n",
    "cmap = \"gist_heat_r\"\n",
    "norm = mpl.colors.Normalize(vmin=-100.,vmax=100)\n",
    "\n",
    "extent = (np.amin(final_dataset_ST_Normal[fold,:,0]), np.amax(final_dataset_ST_Normal[fold,:,0]), np.amin(final_dataset_ST_Normal[fold,:,1]), np.amax(final_dataset_ST_Normal[fold,:,1]))\n",
    "\n",
    "fig, axs = plt.subplots(1,4, sharex = 'col', sharey = 'row')\n",
    "fig.set_figheight(3)\n",
    "fig.set_figwidth(21)\n",
    "fig.subplots_adjust(hspace=0.02)\n",
    "fig.subplots_adjust(wspace=0.02)\n",
    "\n",
    "axs = axs.ravel()\n",
    "\n",
    "for i in range(n_tasks):\n",
    "#     print('i',i)\n",
    "#     print('i +9',i + 9)\n",
    "#     print('to plot',final_dataset_ST_Normal[fold,:, inputs_dimension + n_tasks + i ][~np.isnan(final_dataset_ST_Normal[fold,:, inputs_dimension + n_tasks + i])])\n",
    "    color_max = np.amax((final_dataset_ST_Normal[fold,:, inputs_dimension + n_tasks + i][~np.isnan(final_dataset_ST_Normal[fold,:, inputs_dimension + n_tasks + i])]))\n",
    "\n",
    "    color_min = np.amin((final_dataset_ST_Normal[fold,:, inputs_dimension + n_tasks + i][~np.isnan(final_dataset_ST_Normal[fold,:, inputs_dimension + n_tasks + i])]))\n",
    "#     print('min',color_max) \n",
    "#     print('max',color_min)\n",
    "\n",
    "    axs[i].imshow(final_dataset_ST_Normal[fold,:, inputs_dimension + n_tasks + i].reshape(N,N), extent=extent, aspect = 'auto', \n",
    "                  cmap=cmap, interpolation='None', vmin = color_min, vmax = color_max)\n",
    "    #axs[i].title.set_text(crime_list_name[i])\n",
    "    if i == 0:\n",
    "        axs[i].set_ylabel('Intensity', fontweight=\"bold\")\n",
    "\n",
    "\n",
    "    axs[i].grid(False)\n",
    "    axs[i].set_yticks([]) \n",
    "    axs[i].set_xticks([]) \n",
    "    axs[i].grid(False)\n",
    "    \n",
    "# name = \"Figure3\" + str(cmap)\n",
    "# fig.savefig(name + '.png')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Evaluation of performance missing data exp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.12060547, 0.02661133, 0.04052734, 0.02539062])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_outputs = np.mean(outputs, axis = 0)\n",
    "range_outputs = np.ptp(outputs, axis = 0)\n",
    "mean_outputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(1)\n",
    "# cell_bool = np.ones((N, N))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "cell_inside[~np.isnan(cell_inside)] = True\n",
    "cell_inside[np.isnan(cell_inside)] = False\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "MT_RMSE_results_inter = np.zeros((n_tasks, n_folds))\n",
    "MT_NLPL_results_inter = np.zeros((n_tasks, n_folds))\n",
    "MT_RMSE_results = np.zeros((n_tasks))\n",
    "MT_NLPL_results = np.zeros((n_tasks))\n",
    "\n",
    "ST_RMSE_results = np.zeros((n_tasks))\n",
    "ST_NLPL_results = np.zeros((n_tasks))\n",
    "ST_RMSE_results_inter = np.zeros((n_tasks, n_folds))\n",
    "ST_NLPL_results_inter = np.zeros((n_tasks, n_folds))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "ename": "IndexError",
     "evalue": "index 1 is out of bounds for axis 0 with size 1",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mIndexError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-35-8898393e9c74>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     11\u001b[0m \u001b[0;31m#         print('true',true_counts.shape)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     12\u001b[0m \u001b[0;31m#         print('final_dataset_ST_Normal',final_dataset_ST_Normal.shape)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m         \u001b[0mpred_counts\u001b[0m \u001b[0;34m=\u001b[0m  \u001b[0mfinal_dataset_ST_Normal\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfold\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mcond\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0minputs_dimension\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mn_tasks\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mtask\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     14\u001b[0m         \u001b[0;31m#print('pred_counts',pred_counts.shape)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     15\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mIndexError\u001b[0m: index 1 is out of bounds for axis 0 with size 1"
     ]
    }
   ],
   "source": [
    "n_folds = 16\n",
    "for fold in xrange(n_folds):\n",
    "\n",
    "    for task in xrange(n_tasks):\n",
    "        fold_task_subset = data_final_with_na[fold,:,task+inputs_dimension]\n",
    "        #cond = np.isnan(fold_task_subset)\n",
    "        cond = np.logical_and(cell_inside, np.isnan(fold_task_subset).reshape(N,N)).reshape(N_all,1)[:,0]\n",
    "#         print('cond',cond.shape)\n",
    "#         print('outputs',outputs.shape)\n",
    "        true_counts =  outputs[cond,task] \n",
    "#         print('true',true_counts.shape)\n",
    "#         print('final_dataset_ST_Normal',final_dataset_ST_Normal.shape)\n",
    "        pred_counts =  final_dataset_ST_Normal[fold,cond,inputs_dimension + n_tasks + task]\n",
    "        #print('pred_counts',pred_counts.shape)\n",
    "        \n",
    "        if pred_counts.shape[0] == 0:\n",
    "            ST_NLPL_results_inter[task,fold] = np.nan\n",
    "            ST_RMSE_results_inter[task,fold] = np.nan \n",
    "        else:\n",
    "            ST_NLPL_results_inter[task,fold] = - np.sum(poisson.logpmf(true_counts, pred_counts))/pred_counts.shape[0]\n",
    "            ST_RMSE_results_inter[task,fold] = np.sqrt(np.sum(np.square(true_counts - pred_counts))/pred_counts.shape[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('ST_RMSE_results mean', array([1.36595096, 0.61123246, 0.62951459, 1.24458678]))\n"
     ]
    }
   ],
   "source": [
    "for t in xrange(n_tasks):\n",
    "    ST_RMSE_results[t] = np.mean(ST_RMSE_results_inter[t][~np.isnan(ST_RMSE_results_inter[t])])\n",
    "print('ST_RMSE_results mean', ST_RMSE_results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('ST_NLPL_results mean', array([1.12466775, 0.40336858, 0.45393265, 0.75611052]))\n"
     ]
    }
   ],
   "source": [
    "for t in xrange(n_tasks):\n",
    "    ST_NLPL_results[t] = np.mean(ST_NLPL_results_inter[t][~np.isnan(ST_NLPL_results_inter[t])])\n",
    "print('ST_NLPL_results mean', ST_NLPL_results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('ST_RMSE_results std', array([0.32697541, 0.13047572, 0.11845203, 0.5575689 ]))\n"
     ]
    }
   ],
   "source": [
    "for t in xrange(n_tasks):\n",
    "    ST_RMSE_results[t] = np.std(ST_RMSE_results_inter[t][~np.isnan(ST_RMSE_results_inter[t])])/np.sqrt(n_folds)\n",
    "print('ST_RMSE_results std', ST_RMSE_results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('ST_NLPL_results std', array([0.22416308, 0.07868817, 0.08231063, 0.31167259]))\n"
     ]
    }
   ],
   "source": [
    "for t in xrange(n_tasks):\n",
    "    ST_NLPL_results[t] = np.std(ST_NLPL_results_inter[t][~np.isnan(ST_NLPL_results_inter[t])])/np.sqrt(n_folds)\n",
    "print('ST_NLPL_results std', ST_NLPL_results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "ename": "IndexError",
     "evalue": "index 1 is out of bounds for axis 0 with size 1",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mIndexError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-39-51474ee1b6b2>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     12\u001b[0m \u001b[0;31m#         print('true',true_counts.shape)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     13\u001b[0m \u001b[0;31m#         print('final_dataset_ST_Normal',final_dataset_ST_Normal.shape)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 14\u001b[0;31m         \u001b[0mpred_counts\u001b[0m \u001b[0;34m=\u001b[0m  \u001b[0mfinal_dataset_MT_Normal\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfold\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mcond\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0minputs_dimension\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mn_tasks\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mtask\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     15\u001b[0m \u001b[0;31m#         print('pred_counts',pred_counts.shape)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     16\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mpred_counts\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mIndexError\u001b[0m: index 1 is out of bounds for axis 0 with size 1"
     ]
    }
   ],
   "source": [
    "## Evaluate results for MT\n",
    "n_folds = 16\n",
    "for fold in xrange(n_folds):\n",
    "\n",
    "    for task in xrange(n_tasks):\n",
    "        fold_task_subset = data_final_with_na[fold,:,task+inputs_dimension]\n",
    "        #cond = np.isnan(fold_task_subset)\n",
    "        cond = np.logical_and(cell_inside, np.isnan(fold_task_subset).reshape(N,N)).reshape(N_all,1)[:,0]\n",
    "#         print('cond',cond.shape)\n",
    "#         print('outputs',outputs.shape)\n",
    "        true_counts =  outputs[cond,task] \n",
    "#         print('true',true_counts.shape)\n",
    "#         print('final_dataset_ST_Normal',final_dataset_ST_Normal.shape)\n",
    "        pred_counts =  final_dataset_MT_Normal[fold,cond,inputs_dimension + n_tasks + task]\n",
    "#         print('pred_counts',pred_counts.shape)\n",
    "        if pred_counts.shape[0] == 0:\n",
    "            MT_NLPL_results_inter[task,fold] = np.nan\n",
    "            MT_RMSE_results_inter[task,fold] = np.nan \n",
    "        else:\n",
    "            MT_NLPL_results_inter[task,fold] = - np.sum(poisson.logpmf(true_counts, pred_counts))/pred_counts.shape[0]\n",
    "            MT_RMSE_results_inter[task,fold] = np.sqrt(np.sum(np.square(true_counts - pred_counts))/pred_counts.shape[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('MT_RMSE_results mean', array([0.75975862, 0.22559239, 0.27148854, 0.27075389]))\n"
     ]
    }
   ],
   "source": [
    "for t in xrange(n_tasks):\n",
    "    MT_RMSE_results[t] = np.mean(MT_RMSE_results_inter[t][~np.isnan(MT_RMSE_results_inter[t])])\n",
    "print('MT_RMSE_results mean', MT_RMSE_results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('MT_NLPL_results mean', array([1.02420264, 0.16651913, 0.28661342, 0.29611546]))\n"
     ]
    }
   ],
   "source": [
    "for t in xrange(n_tasks):\n",
    "    MT_NLPL_results[t] = np.mean(MT_NLPL_results_inter[t][~np.isnan(MT_NLPL_results_inter[t])])\n",
    "print('MT_NLPL_results mean', MT_NLPL_results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('MT_RMSE_results std', array([0.14632862, 0.07307546, 0.06838324, 0.09665354]))\n"
     ]
    }
   ],
   "source": [
    "for t in xrange(n_tasks):\n",
    "    MT_RMSE_results[t] = np.std(MT_RMSE_results_inter[t][~np.isnan(MT_RMSE_results_inter[t])])/np.sqrt(n_folds)\n",
    "print('MT_RMSE_results std', MT_RMSE_results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('MT_NLPL_results std', array([0.32985675, 0.05428784, 0.09684123, 0.13582312]))\n"
     ]
    }
   ],
   "source": [
    "for t in xrange(n_tasks):\n",
    "    MT_NLPL_results[t] = np.std(MT_NLPL_results_inter[t][~np.isnan(MT_NLPL_results_inter[t])])/np.sqrt(n_folds)\n",
    "print('MT_NLPL_results std', MT_NLPL_results)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Import results form ICM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "mu = np.load('../Data/btb_experiments/posterior_mean.npy')\n",
    "var = np.load('../Data/btb_experiments/posterior_var.npy')\n",
    "\n",
    "\n",
    "posterior_mean = np.exp(mu + 0.5*var)\n",
    "posterior_var = (np.exp(var) - 1.)*np.exp(2.0*mu + var)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Missing data MT plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "fold = 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1, 4096, 4)"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "MT_pred_vector = final_dataset_MT_Normal[:,:,(inputs_dimension + n_tasks):(inputs_dimension + n_tasks + n_tasks)]\n",
    "MT_pred_vector.shape\n",
    "ST_pred_vector = final_dataset_ST_Normal[:,:,(inputs_dimension + n_tasks):(inputs_dimension + n_tasks + n_tasks)]\n",
    "ST_pred_vector.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "cp1_MTCP = (MT_pred_vector[fold,:,0].reshape(64,64))/ (MT_pred_vector[fold,:,0].reshape(64,64) + MT_pred_vector[fold,:,1].reshape(64,64) + MT_pred_vector[fold,:,2].reshape(64,64) + MT_pred_vector[fold,:,3].reshape(64,64)) \n",
    "cp2_MTCP = (MT_pred_vector[fold,:,1].reshape(64,64))/ (MT_pred_vector[fold,:,0].reshape(64,64) + MT_pred_vector[fold,:,1].reshape(64,64) + MT_pred_vector[fold,:,2].reshape(64,64) + MT_pred_vector[fold,:,3].reshape(64,64)) \n",
    "cp3_MTCP = (MT_pred_vector[fold,:,2].reshape(64,64))/ (MT_pred_vector[fold,:,0].reshape(64,64) + MT_pred_vector[fold,:,1].reshape(64,64) + MT_pred_vector[fold,:,2].reshape(64,64) + MT_pred_vector[fold,:,3].reshape(64,64)) \n",
    "cp4_MTCP = (MT_pred_vector[fold,:,3].reshape(64,64))/ (MT_pred_vector[fold,:,0].reshape(64,64) + MT_pred_vector[fold,:,1].reshape(64,64) + MT_pred_vector[fold,:,2].reshape(64,64) + MT_pred_vector[fold,:,3].reshape(64,64)) \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "cp1_ICM = (posterior_mean[fold,:,0].reshape(64,64))/ (posterior_mean[fold,:,0].reshape(64,64) + posterior_mean[fold,:,1].reshape(64,64) + posterior_mean[fold,:,2].reshape(64,64) + posterior_mean[fold,:,3].reshape(64,64)) \n",
    "cp2_ICM = (posterior_mean[fold,:,1].reshape(64,64))/ (posterior_mean[fold,:,0].reshape(64,64) + posterior_mean[fold,:,1].reshape(64,64) + posterior_mean[fold,:,2].reshape(64,64) + posterior_mean[fold,:,3].reshape(64,64)) \n",
    "cp3_ICM = (posterior_mean[fold,:,2].reshape(64,64))/ (posterior_mean[fold,:,0].reshape(64,64) + posterior_mean[fold,:,1].reshape(64,64) + posterior_mean[fold,:,2].reshape(64,64) + posterior_mean[fold,:,3].reshape(64,64)) \n",
    "cp4_ICM = (posterior_mean[fold,:,3].reshape(64,64))/ (posterior_mean[fold,:,0].reshape(64,64) + posterior_mean[fold,:,1].reshape(64,64) + posterior_mean[fold,:,2].reshape(64,64) + posterior_mean[fold,:,3].reshape(64,64)) \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "na_task1 = data_final_with_na[fold,:,inputs_dimension].reshape(64,64)\n",
    "na_task2 = data_final_with_na[fold,:,inputs_dimension+1].reshape(64,64)\n",
    "na_task3 = data_final_with_na[fold,:,inputs_dimension+2].reshape(64,64)\n",
    "na_task4 = data_final_with_na[fold,:,inputs_dimension+3].reshape(64,64)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "na_task1[~np.isnan(na_task1)] =  0\n",
    "na_task1[np.isnan(na_task1)] = 1\n",
    "na_task1[na_task1 == 0] =  np.nan\n",
    "na_task2[~np.isnan(na_task2)] =  0\n",
    "na_task2[np.isnan(na_task2)] = 1\n",
    "na_task2[na_task2 == 0] =  np.nan\n",
    "na_task3[~np.isnan(na_task3)] =  0\n",
    "na_task3[np.isnan(na_task3)] = 1\n",
    "na_task3[na_task3 == 0] =  np.nan\n",
    "na_task4[~np.isnan(na_task4)] =  0\n",
    "na_task4[np.isnan(na_task4)] = 1\n",
    "na_task4[na_task4 == 0] =  np.nan"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# This get the plot for the missing data experimemnt. Changing the data that are imported one can make the plot with covariate or no covariates. When using the cov the plot creates a problem in the first row. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAogAAAHICAYAAADN+RtLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3XmYZFV9+P/3Z3pmYGBYBmYQBIZBEBGMcRkT4wKImAhJxBijWdQvLuHrLybGfJVEozFoxAXjksR1NGrMhnEXFVEkQnBJMkOCsos4jAsKwyLLMDDMnN8f957uW9XVy+2+1X2r6v16nnpO1a2695xqPtScc+5ZIqWEJEmSlC1Z7AJIkiSpXawgSpIkqYMVREmSJHWwgihJkqQOVhAlSZLUwQqiJEmSOlhBlCRJUgcriJIkSepgBVGSJEkdli52AQBWr16d1q1bt9jFUMtt2rRpa0ppjfGi2TBeVEeOFyj/TTps7WIXSS22+YYtbN26NRa7HP3UigriunXr2Lhx42IXQy0XETeA8aLZMV5UR44XgHWHrWXjNy9ezOKo5db/0nGLXYS+8xazJEmSOlhBlCRJUgcriJIkSepgBVGSJEkdrCBKkiSpgxVESZIkdbCCKEmSpA5WECVJktTBCqIkSZI6WEGUJElSByuIkiRJLRcRR0bE+yPisojYGRFf63p/eUT8W0RcHxH3RMTNEXFeRDx6LvlZQZQkSWq/Y4FTgGvLR7cxIAFvAn4V+H1gD+DCiHhQ3cyWzr2ckiRJWiDnppQ+CxARnwBWV99MKd0DPLt6LCIuAG4Bng68vU5m9iBKkiS1XEpp1xxOuxvYDiyve6I9iJIkSUMiIoLidvNq4OXATuBf617HHkRJkqTh8WfADuBG4P8Ap6SUbqh7ESuIkiRJCygiUtfj8ojYWHmcPo/LfwR4DPA0YBPw+Yg4pu5FvMUsSZK0wMYqz3fC9pTS+iaum1L6CfATgIg4D7gCeCXwvDrXsYIoSZK0gAJYVnm9s0/5pJTuj4jvALWXufEWsyRJ0gLKs0jyo2/5ROwOPAr4ft1z7UGUJElaYHV76CJiD4qFsgEOBvaOiGeWr78InAqcDHwJ+DFwEPAHZVprDUSwgihJkrSggjlVwA4APt51LL8+HLgGeA5FZXAVxSzm/wTWp5SuqJuZFURJkqQFNJcKYkppc3nqVDZTbLHXCCuIkiRJC6yfYw+b0OgklYj47Yj4ekTcFRGbm7y2JEnSMFioSSrz0fQs5luBvwVe1/B1JUmShsIgVBAbvcWcUvoyFD2JTV5XkiRpmLS1Ypg5BlGSJGkBzXEW84JatIWyI+L0vOfgzTffvFjF0IDYsGEDwEONF82G8aI5WD3+b9LWrYtdFg25XEHMjzZatApiSmlDSml9Smn9mjVrFqsYGhCnn346wFXGi2bDeNEcbB3/N2n16sUui0bASI1BlCRJ0vTyJJU2a7SCGBFjFPtPLytexu4AKaXtTeYjSZI0qAZhDGLT5Xsu8OHK63vKdLqVvyVJkkZK23sQGx2DmFL6SEopuh9N5iFJkjTIRm4dREmSJE1v5MYgSpIkaWZWECVJkjQuKGbztpkVREmSpAXkLWZJkiRNYgVRkiRJ44JF3MpulqwgSpIkLSDHIEqSJKmDYxAlSZI0iRVESZIkjbMHUZIkSZNYQZQkSdI4J6lIkiSpg8vcSJIkqUPQ/gpY28snSZI0dByDKEmSpHH2IEqSJKmDy9xIkiRpEiuIkiRJGmcPoiRJkiaxgihJkqRxLpQtSZKkDt5iliRJ0iTupCJJkqRxroMoSZKkDlYQJUmS1MExiJIkSZrECqIkSZLG2YMoSZKkSawgSpIkaZwLZUuSJKmDt5glSZLUYRAqiI0v5B0RYxHx1oi4OSLujIhPRsTqpvORJEkaVGOVRxv1Y6eXVwK/DvwCcEh57B/7kI8kSdLAyQtl58eszolYGhGvjIjvRsS9EfHDiHjHDOesi4jU43HOTPn14xbz6cBrU0rfLwt3BnBdRKxLKW3uQ36SJEkDY463mD8MPBl4HXA1cChwzCzPfQXw9crrrTOd0GgFMSL2AdYCm/KxlNL1EXE78HBgc5P5SZIkDaI6FcSIeCrw28DPp5SunEN216SUvlXnhKZvMe9dpj/rOn5b5T0AIuL0iNgYERtvvvnmhouhYbNhwwaAhxovmg3jRXOwevzfpK0zdq5I85J7EGuMQXwBcOEcK4dz0nQF8c4y3afr+L7AHdUDKaUNKaX1KaX1a9asabgYGjann346wFXGi2bDeNEcbB3/N2m18yrVX3OoIP4icG1EvCsi7oiIbRHxqYh44Cyz/HBE7IyIGyPi7RGxYqYTGr3FnFK6PSK2AI8CLgeIiMOBVcC3m8xLkiRpEPVYKHt1RGysvN6QUtpQeX0gcBpwGcWt5r2As4FPR8RjU0ppiqzuBd4NfJmio+4E4M+AI4BTpytjPyapbABeFREXA7dSfIEvO0FFkiSp0NVzuDWltH6aj0f5ODWldAtARNwIXAScCHy110kppRuBP6wc+lpE/BR4T0Q8IqX0v1Nl2I9lbt4MfAHYCPyI4m/wnD7kI0mSNHACGBubeMzCbcB3cuWwdAlwH7OfyZx9okwfNd2HGu9BTCntpJhO/Yqmry1JkjTwApZUa2A7ZzzjKmC33ldiV83cU1faUz96ECVJkjSFCFi2fOIxC58HHt61M91xFEMZL6uZ/TPLdNN0H3IvZkmSpAUUAWP1amAbgJcC50bEGykmqbwFuCCldMnEdeM64KKU0gvL12eWn/06xSSV44AzgE+llKadPGwFUZIkaSHVrCCmlO6IiBOBvwXOoRh7+FngT7o+upTO+S9XUwz5exGwAtgCvBU4a6Y8rSBKkiQtoDn0IJJSug44ZYbPrOt6fQ5FhbI2K4iSJEkLKKhfQVxoLS+eJEnScIkls56csmisIEqSJC2wJS2vgbW8eJIkScMlApa2vAbW8uJJkiQNmTlMUlloLS+eJEnScImApY5BlCRJUjaXZW4WWsuLJ0mSZnT1Z4r06Kcvbjk0O1YQJUmSVGUPoiRJ6j97DgeKC2VLkiSpgwtlS5IkaRJ7ECVJkjTOMYiSJEnqFBAtr4G1vHiSJGncfJazcSmc9gjAMYiSJEkaF7S+Btby4kmSNKJyjx/AtZ8v0qd9sPdnZtMruFA9h9VyL2S+g8QKoiRJkjpYQZQkSXNS7XnLPYiDwB7DmVlBlCRJUgcnqUiSpJ66xw92j92r6h57mOWeRXvtBos9iJIkSZqk5TWwlhdPkiRpyNiDKEnSCJlu2Znu97o/0/26est5quse9WtTn+Nt5/aKJbB8ReXA3YtWlKlYQZQkSVpIEbB098oBK4iSJA2mau/c515YpH96S+dnpuu1m22P3mx6IXP+T/v7ueWhxRVLuiqI7WMFUZIkaSFZQZQkaUhUe+emGi9Ypwevzjmfe1HHy/iL+wBIR7vMzUCadIu5fZY0ebGIOCsivh0ROyLiI01eW5IkaSjEGCxfOfFooaZ7EK8DXgk8t+HrSpLUXvPpwcs9iXnR6zwzuTrmMS+UXfYkpsv+cf75avEMQA9ioxXElNKHASLiaUC7v7kkSdJicAyiJEmSOg1JD2JE/BPwe9N85PkppY/UyTgiTgdOB1i7dm2dUzWCNmzYAPDQiNhovGgmxovmYHVEbARYu/bQznfyBJHqfsgv2qtIP3jn3HPsvj2cbzF332qezlwmx2jxLRlr7djDbLaTVE4HVk3z+Je6GaeUNqSU1qeU1q9Zs6bu6Roxp59+OsBVxotmw3jRHGwd/zdp9erFLouGXnmLOT9aaFY9iCmlbcC2PpdFkqT2yT2H1UkjrygniZy9f5HmBbO7X88nn9yT2OszGmyjNkklIpYBY/kREbsDu1JK9zWZjyRJ0sAawUkqHwD+T+X1c4CLgBMazkeSpIVR7TnMcu/e0b/ReXwuPYfd8njC6cYVOvZwsI1aD2JK6TTgtCavKUmSNFSi/ZNUXOZGkqTp5F66XgtX9+pdXAjXusXeQBu1HkRJkiTNYATHIEqSJGlaVhAlSRoOvW7nLtYt3jrL3TihpX2WLHEMoiRJkqra34M4251UJEnSIDr66fYetk2epFJjJ5WIOCYivhoR2yLixxHx+ogY61cR7UGUJElaSDUnqUTEKuAC4ErgVOAI4G0UHX2v6UcRrSBKkiQtpPqzmF8MrACekVK6A/hKROwNnBkRZ5fHGuUtZkmSpIUU5SSV/JjZycD5XRXBcygqjcf3o4hWECVJkhZS7kGc/RjEo4GrqwdSSluAbeV7jfMWsyRJ0kKqv5PKKuD2HsdvK99rnBVESZKkhTR5DOLqiNhYeb0hpbSh66zU60pTHJ83K4iSJEkLKSYtlL01pbR+mjNuA/btcXwfevcszpsVREmSpAW0adOl58fYstWVQ1tnOOVqusYaRsShwJ50jU1sihVESZKkBZRSemrNU84DzoiIvVJKd5bHng3cA1zUaOFKzmKWJElqt/cB9wKfioiTIuJ04Ezg7f1YAxHsQZQkSWq1lNJtEfFk4F3AuRTjDt9BUUnsCyuIkiRJLZdSuhI4caHy8xazJEmSOlhBlCRJUgcriJIkSepgBVGSJEkdrCBKkiSpQ6TUly386hUi4mbghsUuh1rvsJTSGuNFs2S8qI7DUkprwH+TNCvj8TKsWlFBlCRJUnt4i1mSJEkdWrFQ9urVq9O6desWuxhquU2bNm1NKa0xXjQbxovqyPEC/pukmW3evJmtW7fGYpejn1pRQVy3bh0bN25c7GKo5SLiBjBeNDvGi+rI8QLGjGa2fv36xS5C33mLWZIkSR1a0YOoAXHpB4v0/u1FuuOeIt15b5He9ZMiPeVdC1sutZPxojqMF9VlzPSVPYiSJEnqYAVRkiRJHbzFrOn98JsTz1ceWKS5Gz9L9xfp3ocsTJnUXsaL6jBeVJcxs2DsQZQkSVIHexA1vbHdJ57vsX+R7tpZpvf3TjW6jBfVYbyoLmNmwdiDKEmSpA72IGp6Y8t6P6/auaNIc2ttyyUT7619Qn/KpXYyXlSH8aK6RjRmIuKZwP8DHgLsCdwA/CNwdkrpvmnOWw+8EXg0EMClwKtTSv85U572IEqSJLXb/sC/Ay8CTgY+BLwaePtUJ0TEocAFFJ2BzwOeWz7/ckQcNlOGjfcglrXVo1JK/9L0tbUIDnjYxPObLi/Spbt3fmZJGUa5tbbEjumRZbyoDuNFdY1ozKSU3t916N8jYm/gJRHxRyml1OO0XwX2Ap6RUrodICK+AWwFTgHeO12ejfUgRsSqiLgI+E/goxHxoIjYGRGvayoPSZIkAXALsHya95cB9wN3VY7dVR6LmS7e5C3ms4Anls8jpXQ98N8UtVRJkiTNQ0SMRcQeEfEE4KXAe6foPQT4JLANeFtEHBARBwDvAG4DPj5TXk32u/4qsBH4FvCS8tgVwG80mIcWUx74O9P7Li0gMF5Uj/GiukYzZu4GdiuffxQ4Y6oPppR+HBFPAj5PUZkEuBH4lZTSzTNl1GQP4n4UFcKdlWPLgLEG85AkSRpoEZG6HpdHxMbK4/QpTn0cxd3alwOnAu+aJo+DgE8AmygmtpxcPv9CRKydqYxN9iBeBzyZYgwiEfF0it7DaxvMQ4tpqsVH87ZGebHSAV1GQA0zXlSH8aK6Bjxmqr1nO2F7Smn9TOeklC4tn14SEVuBf4iIt6WUvtfj42dQ1POemVLaARARFwLfBV7BRK9iT032IL4XOAR4Rvn6k8AeQPfMG0mSpJEVFLdY82OOcmXx8CnePxq4IlcOAco1E68Ajpjp4k32IH4AOJJi/OEKYDvwnvK4hsHOe4t0Sdeoge5tjiQwXlSP8aK6BjhmgkbG3z2+TL8/xfs3AKdExPK8mHZE7AY8DDh3pos3VkEsZ9H8aUS8GlgDbJ1udW9JkqRRVecWbkR8iWLR6zzX4/EU4xA/lm8vR8R1wEUppReWp32QYmHtT0fEeyjqpS8BDgI2zJRnYxXEiHgBRXfmq8qZM0sj4s3AtSmlDzWVjxbY9RdMPM+tsbwo6dJyIlVuvXW34jR6jBfVYbyoriGJmaB2Bey/gdOAdRTrGF4PvAp4X+UzS6l0TKaUNkXEU4G/pNiWD+A7wFNSSpfNlGGTt5j/Erg8pbSzLNj9EXE08GyKLWEkSZJGXt0KYkrpL4C/mOEz63oc+yrw1VqFKzVZQTwA+GHXsZ8CBzaYhyRJ0sBrb/9mockK4o3ASRGxMqV0V0SsBE4qj2tQVQf55uf3by/SvL9l7sbfVV0Cs7TlkiJt6TIDaliOjV7HjBd18/dFdQ3Jb0xDk1T6qsllbi6mmGr9vYi4gGJdxHXlcUmSJDFRQcyPNmqyB/G1FNvtrQFOLI/dSjE2UYOiOgAYJlpk1edLusKme0mBXoOIr/5MkR799GbKqXbojpc8WLzKeFHm74vqGuLfmLZWDLMml7nZEhEPB14IrAW2AB9KKf24qTwkSZIG3RxmMS+4RsuXUroReEOT19QCyeMycksst7K6W2YwsZRA1t1aq44R2XFPkR77W82UU+1gvKiO7njppXv8WGa8jKYh/40ZqQpiRCwH/hz4ZeABFN8fijW0Z9zSRZIkaVSMzC1m4K3AHzJRMcxSg3looVVnGeaxH9EVNmPd4z96bG/0vx8p0kec1lTJ1EbGi2aj13/z3DNkvGg6Q/IbM2qzmH+DYlLKNykqhW8D7gbe1GAekiRJAy3fYs6PNmqyXAcCHwXuAB6bUjojIg4CjmkwD0mSpIHX9h7EJiuIdwP3ArcBRMSTgUOAxzSYh5q2+WtzP3fS4OGxzuMAy1YU6c57556P2sN4UR3Gi+oakZgZhFvMTVYQf0BRIfwaxXf/cnm8e/s9SZKkkTVqFcT3Ag8CPgdcCjwK2EmxgLbapruVNmmZgB6hMVZ+ZqqlKvJA4V4LmY7tNvmYBofxojqMF9U1gjEz9BXEiDgFuB74AnBHSuneiHgsxdjDm8u1ESVJkkTRg7hssQsxgyZ6EM8F/gb4Y+CdwMtTSvcD327g2mrCtZ+feL58ZZHmFld3C2ysDNmdO4q0ujxA92ey/Dq/v6NHWOVxH5d+sEgf9aLZl18Ly3hRHdd9aeJ57qkxXjQdf2NG5hbzTuAhFN/30Ig4rvsDKaWLG8hHkiRpKIxCBfGHwFMp1j78zfJRlRrKR3Vd+Joi3e/IiWO5RZVbbTOpju3oXmy0u5XWqzW3s/xfIPcsLN9zdvlq4RkvqqNXvKw8sEiNF/Xib8y4oNmFqPuhifKdDWwrn0ePR9v/BpIkSQsmj0HMjzaad+UtpfS+lNJeFN/3nSmlJd2P+RdTkiRpOOQxiPnRRo3c+o2IZcBngZubuJ4aclc5gTzf9gG4f3uRjg8mL0NzV9e53QODq3Zu751fd7c+wFiZz9KdRbrHmhmLrUXShnjpXpbCeGmvNsSLvy+DxZjp0NaKYdZIBTGltCMiTgJc0kaSJGkaozKLOfs08LiIGEsp7Wzwupqru7cW6fbbJ47tvm+RTlqOomswb6+W1713dl6/e4BwVl2UdLzV1zUw+PoLivRBJ03/HbRw2hAveemJdH/ne8ZL+yx0vPTsDfL3ZaC04TemRTEzShXE3YGHAddFxDeB3OebUkovbDAfSZKkgTUqC2VnzyzTw8pHovgbJMAK4gI6LwKAk999bHFgz9UTb44vQtq1iXl+3T2+o/o69+rsKjuI8/Sj7rEiU217BBMtvKlaelpwxovqWLR4mU0MGC+t5G/MZIOwxEuTFcSPUlQGJUmSNIWg/QtEN1a+lNJpTV1LFWeVi3j+rFxq8uxKHfylRats14+Kl0setQcAD3xA8fofX3IFAM/9m3smzrn/3iLdcXeR7l2mebHQ6Br3cX+Pc7u3RMrjxvJCp9WWWG7h3Vfmc89tRXrvzyZ9VTXAeFEdbY6X7i3Y8utllYWNjZeF1+aYGbDfmJEZgxgRa6d6L6W0pal8JEmSBtlI9SAC35/iuFvtSZIklUZtmZto8Fqj6+I3FOlx5Z6Ve5ULiu64vkjf87Dxj+4o+2V/ekORHvLkwwHYZ3XRjb/qp+UH/+v6ievfvrlILy9H8f7G04o0d9HnRUvz69xVXz22RznAOC9PkG/57LZXeXyfiXPy7YF8+yAvlHrrdUX6qBeheTBeVEd3vOxzSJHuuLZI5xIvG42XoeZvTN+MUgXx8K7rPhx4N/C6BvOQJEkaaCPVg5hSuqHr0PciYj3wYuD9TeUz9HIr7erPFOkjnl+kV36iSB/46PGPLntY0So75KjyQDl4d90zipfrTinS/94wcfl1xxSttM1XFq8fs9fniid5vdHlRfJv/1yk1RXPf6csytays+H2sjW49qHlqc97dvmkMoh8adnau++uIr3jB+VFrinS15Ydz693AvyctCxeqgtF/K7x0j7d8fLw5xapvy+air8xfTMyFcSIeF7XoX2B3wX2byoPSZKkQTdqC2V/hMnrIAZwYYN5DJ+8vU9OV5T16Tx2Ylu5NVGe2p+n9QOsKJYQYOm2zvfyIqF55n+lmbLlqiLd/6DywPEnlueUbflvXwRAuThAR2uNxxYtxdWrNxXpD4vDuSHGf32sI19g8kqg9xXJs95apGXjkA9/e2II67LP2Nqf0jDGSzVGun+RjJf5aXm8dOzJOpffl/w8l8l4mb+Wx8yw/MaM1C1mYAudFcS7gE3AqxvMQ5IkaeCNzE4qKaV1TV1rpOSZU7nJkxf0zDOsfryxSPNMrwMfOXHuuhOKNC/8uflrRZrXES3XDH3ECROn3FXukb73keWBvDH58r06yvHoXyxaZB27HB31a0WaNzff538A+MxritbiwecXh1c9YOKU7eXXuP3Wsojl8dxyOpoeysVW+Vtb+pMYL5MZL1Nb4HjZdkeRrnxQecB4GTz+xkzWh5gZtXUQx0XESuB5wK0ppXP6kYckSdIgGqkKYkR8FngCsAb4BPCU8vjRKaUzm8pHkiRpkA3CGMRIqZku04jYAvwvxczl24HvUKyNeHNK6cHTnbt+/fq0cePGRsoxcP7pV4p05UGdx+8t5vhvOetTAOwqB/ku323iIzeWa43eXd7WOe4l5RtlbzsHHlykB00sQ8D+5X+KPcs+96s+WaQPXF+eWy40esmbinTzrolzH7x3kd5cZnhTkWy7pbPoqXLKl79cpHm479PPKNJbv9V5zn6VjRpfXy5nkFsvf17GaERsSimtN14wXoyX2VmIeDn4FydOWlUuhzvA8QL+mwT4GzNDzKxfv56NGzfOeYOQtRHpTyuv/wjG468tmhwjeQDwA+AhFH/704B/Aw5uMA9JkqSBlnsQ86ONmrwFfjdwFHASxaT2aygqoDumO2nk5cU57ytHzi4tm2Pbf9bxsbHyv9T2bZVj5SJKS/O8/DwQOK86sPxHRbrfkRMn3VeuPrrvuiJdXQ7JXXVEka5YVaSH/FKR7vr6xLl5mYMoW2tlmZaW5YiyubGzsg5B/o8//j/AfZ3nZHffPPE8v5UbnZfu7y6O44wXwHiZtQWJl0p3zZ7llmfGy+DyNwaYOWa2df455qStFcOsyQripcCJ5ePSlNL2iDiSiUlCkiRJI2/UFsr+Y+C9FOtMviwillPUzf+lwTyGz0+KHQp3XlykY+U6o/zcfgCsLdcMpRxq8dMvT5x6S7nH+APyWIljD+u8dt7AfFel+XT31s7P5PEduemXW3EPf06RHviIic9uz+sRlMsg3PJdAJbnVlzZ5Fp260ST8ln5++RIK7/H3j9Xvs4tvM0T2byq3D6J8jJf/zTKjBfAeJk14wUwXmoxZoCZY2ZXZVzjXAzCJJUm10G8Eji+6/AvN3V9SZKkYTBSFUTNzalvKdKTy9flcAiOf0CxiueDyzVI7y/feMAJE+c+4JnlrK+9DynSPcotkZaVmxLl8UDVsSM77ulMf/aDzgLd9ZMiveCs8nXlvee9t0jzGJG85VLetH1H2bxaUTnngDLNY1DKVtf2ssG3pGytLX9YpYjlpu15e6PH5zfCsULGS5FW4+W+y8tjnzNeuhkvRervy+wZM0U602/MyvXzn3BsBVGSJEnjRmqhbEmSJM3MW8zq6dmVWxn5WR6y271seffUe/bZe+L5kin+8y0r+9OXlunulfeW79n5mTxYOC81kLvoy159tve6fnmNPNg3L1mQBxffV7kHcNcNnefuVQx03v3QWzuPV77KjrLr/+oHFn+dn/vxaO+ZarxMHy/3l+tWXGO8AMYLwO7rynjZWR7392Vaxszi/Ma0vYLY2ELZEfG6iHjQzJ+UJEkaXaO2UPZfAK+JiEuAjwAfTyndNf0pI+Lz/7dIr/4sMD6rHig3rGaipn5A+eTgsgG0fE2Z7mSyK8pFR/cv0ye8oPxwOcU/t8R++J8T5+RlAe4p07wI6a3fK9LcEntmuUdSboEBLC2bfdtvKwtdhnVehiC/vnXiP/u2cs3V7eWaq/vtVrbS8sjnvJDqAyayyZe57x5G0xzi5YFl08x4GUH+vkyOlzwBoTzeK15yT+JI8jdm0X9jBuEWc5Nb7X2e4n/LJwIfBH4SEf8QESdOf5okSdLoyAtl50cbNbkO4tMiYiXwa8AzKGbJPwd4TkRsAd4B/F1KafgHfNxazpe/44dFemC5LkA5tf8Dr/v4+EfP/8tijn1exnOfsnW2+qjywIPKQRV3lp/YfMf4uXlHpFXltP2xXyibRHnh0R1lq+m270+U7Z7y/Htyi6sMgc1lK2qf8nOHlAVYVdkS6foLivQn/1OkeSmDhz+3vFbZHsrfG7iq3AA9b8f0+DwIoWxIbiuLsfTSiWz+4wtFuteejIYG4mVNucqD8TIChuH3Ze2x5evKQsrGS//4GzN+Sptipu09iI1OUkkp3RURn6DY7nANEwtnH0ZRQTwGeHGTeUqSJA2SAMaqNcRet+wXWWMVxIg4BnghRa/haorvfyvwIeBTwNnA7zAKFcQ8K2vlgUWaW0R5/MWOiYEMO/gcMDExKy/SOT4ba/8HF+lu5RSuHT8dP3dFmc1YuQbp+HiMnF9O9zl0omy7leM88gbsuWWXtw3aI68SulfnNQH2LAdl5NZnnimWt0/K8vgP4J7C/afQAAAgAElEQVS7ri2KnafEjX/RIkllvj+r7LaU55JdWDY+H8uQM17GnxovszAM8ZKvZbwsjGGImWH7jYmuSd/DXEEELqeYER/ARuDdwDkppXsBIuIzwBMazE+SJGngRMCy5ZUDLZw01WQFcTvwMeDdKaWNPd7/APDJBvOTJEkaOBEw1vKVqJss3muAi6uVw4g4CFiTUvp2SulO4M4G82u/3BWep+Xnbu6DHjn+kavK7vznlxuCrj6pfGNteWDbzUWa+6KPHd85lD0PLQfe5tsGd93YmX+U5/z4islly7cNyrsD27YU6R7HlmXMe2iOVeZXrTq8s/z5+9y+uUjvL/vqj/mt8VOe8E/lvYZbrukoyzX/XLz8webO4gB8sUxzIL1pcumHk/FivNRRI15e+MTi9X55TYkRjpcvlel/lenIxAv4G0OLfmMGoILY5DI3b6UYY1j1p8D/NJiHJEnSQMs9iPnRRvMuVkSszU+BfSqvlwBHM3mnntG1vGy5VAbQXlamt5etptV5NOzKclmCW8s38oDaPAgXJgYYdw84HusaAH5zpQy58VWOfbijzObG64v0Ib9ZrmmwrCzrzh0T597X1QGcty/a8h9lGctBFCv2n1zG3GLd7+DiI3sVC6muKMtx/X0Tp2wu0x8w4owX46WOaeLl1rIjZ79Bipfc+9NwvJRFMV7A3xhYtN+YoL0Vw6yJ4uUFjRLw/PJR1dXHLEmSNLpiSdcklRZqooKY9/ZOlefZvcBfNZDHYOgebzGV3GoDvlumN5VDN47MU+v3LVtpE2uQFnLrByZaQLl1lFtteYxGXtqgOjsqDyooP7pnuQhpuV/5xDn5GvdWWmjloqoTr8vlCXIrLZftnlsmPpO3TcppOUbkgLXFgI+8ddF3r5s4JRf3jjxs5He7w2pIGC9FarzMzjziZWt5auvipbK8yqR42VYWdh7xkrfT++61E6eMx8uzyyfDGi/gb0w/f2Mqa33P1ZIR6EE8nKJieD3Fmoe5QrgT+ElK6f6pTpQkSRo1EbB02CuIKaUbACLiScAP8uuhl7cuqi7ambf12TXFipfdi4UC5ZbpfLAcbvOFfy3S3z6oSO8ph1TcUzaajv+zr4+fu+PqIt12RzELa2nZwPpRWbQ9yh3YDzm5UobcpV0uBjpW7kz0wLz/+eUX9i47wKrighf+edGEzA3Jp7//0cWT03utbtTb7tecC8CRhxZX+emWifcu/pXyyQFdZR5kxovxUkfD8fKBcoHfc6eIl+3l+8edMVzxckQZLz/ZPPHeeLzkYXfDEC/gbwwL/Bsz39rTAMxibmKSymuBb1EuLh4xubs+pfT6+eYjSZI0DCJgacsbJ03UX88E3gm8jKlnLFtBlCRJYnQWyr4I+F6Zjo7xPSbHJr+XB8bmZRryQOxdk4djvuCrry7SG8vlIm8uuua/c3Zxp/6mshv/7nxCZXmAZWURVpaDfMfK1siqcnvKPcqtK3ljj3r77xc9vTvK6+XbBXuX65vSa+To3UXXe966cl7rF72qc3DxoV+f6Hlenm8t5LTl/xPNivFivNQx7PGyqysF42W+hj1m2vYb0+PPXMsoVBBTSk8qn757vteSJEkadqPSgzhJRKwEngfcmlI6px95LJq8bMDYbpPfyxO2d3Wl3cer5+ZW325F0+qUPylaaV9897HFR99ctN7uKmfvv/hDE6e+YC86/MKvFem+5UDaZQdN8z3KVQiWfaBocy2b5qPdTnlDjQ/P0tpvV9p+LytbbnuWI5pzy+51A7gcxR3lWhF9ipeTy3g5z3gZjnjx98V4qavPvzHGDL1j5vPr53X9UVkoG4CI+CzwBGAN8AngKeXxo1NKZzaVjyRJ0iAblYWys0cCXwf2AE4Cvk2xRuLvUUxkGWy5ZZ83Gx/r0b65v2uQRHVLIJjUMgMmtjgqF+v84mdfUF6rWJpz64+K1tqSckzH+96wx/ipF75mGzAxFuRj5XIEeZjEkUcV6RG9vs+bW7wDYtlI6x4TMlC6e4L6FC/nGS/DFS9N/76sLAdwlVuQdf++3HrjFR2XMF4GyAL9xvhvEn2Lmbb3IC6Z+SOzdgDFVoUPoeg9PQ34N+DgBvOQJEkaaHkMYn60UZPFuhs4iqL3cBdwDUUFdMd0J7Ved8s+yy2x6kYx95XtpjxTbOf2znNyS6/arZxb+Fneoqi87nEXvbG8ZrnZT95+Cjjxw5cXT/LG5FcXUwLPK1ttR1zT4hbZdF4/oOUG42UxGC+FHC+7V6ZXdo8964qXJ/y78TJw/I1ZeP2ImZj8n7BtmizepcCJ5ePSlNL2iDgS2NxgHpIkSYMtaP0uPk1WEP8YeC/FV35ZRCwH7gP+tcE8JEmSBlvQ+jU4GyteSulK4Piuw7/c1PX7Ymu5ceSSHn+G7kVHx5cFKPe0zF321YVG8+KjuRs/d8Ev3a0zn2p+eXxvPnbfnZ35ZL2WMFh9dJk+pEj3+xoAJ6++dvJnNX9ziZccA923+mDx4mW/coj4fpcAxkvfdMdL9b/j+LE+/L5Uf9Z335cOU8XL8pXltSsjgvx9WXj+xoyOUaogAkTEE4HHACsrh1NK6a+azEeSJGlgjVIFMSLOAl7ZfZhi95v+VxDztkBVedp/bhUf9MjO93tsMzTpvdxayy2v7q2KptPdCszl6dU6zHIrMeeTP5tb+NVW24pVne8tXVG+7lqtVJMZLxNxYrzMrIl4qb7u7g0ahHjx96Uef2P8jZnOKFUQgdMpvvLlwK3Mc1tESZKkoTRik1QAPpFSelbD15xebqXNpuXVfU6vhUW7z7m/63X3JufVllf39aIr316ttPEWZdkqzK217h6G3ALLxwGWrZh8TNMzXibHy3R/i1HXr3jJusePzSVeeo0j6z5nLvGyW49jmpm/McbMbAxAD2KTC2X/PXBERPQYuSpJkqRxSyuPFmqyWI8HHgH8KCKuZKKdk1JKT24sl5vKhThzqynP5Oq14uRUrbTcyuluPVU/P9X4oe4W2XQtvnz9/JleLcrx1l85Qyy3zvL36W6R7Xfk1PmtfcLU740q42Xq/HK8POK0qT8zahYqXrrHcw1SvKiTvzFT52fMTG0AehCbriAC7AdUo8KxiJIkSVksgeUrKgfunvKji6XJCuLrGryWJEnScIroGqs5xBXElFLzFcQ7fjjxfKoBv7nbO/V4v7uLfKyra7z79k6vPLqPdZ/by84ptp/Ox3vl092Nf/BjirTXUgnqzXgxXuqoEy9ZNW7aFi9Zr+VOjJdm+BtjzDQllrR+Mk+Tk1SIiGMj4l0RcX5EHBARz4uIo5rMQ5IkaaDlCmJ+tFCTC2X/EvBVYHeKcYd3AX8HfBJ4Qa2L3XpdkVZbRFO11rq3qJquJTRdC2uq96c6p7ulV9W9GGr38Z7nTBEg3QupajLjZYLxMrNhjZfp5HjpnsBgvMzOsMaMvzGLZ9It5vZpsgfxrPJ61wCklLYB/wEc12AekiRJgy3Gih1n8qOFmpyk8kjgs8CPgXxbeQvwpFlf4foLinTlgUU6m9ZaXmj2vrsmvzdeO9+t8xrTje/IuhefrbOYcHcLb7rXUy1VoJkZL6rDeFFdxoz6ZQB6EJusIG5n8sYxRwO3N5iHJEnSYBuASSpNVhAvBU4BrgOIiM8AxwNfmPUV8uKx28s6ZR6nARMzqXJLJ4/zmG6j8u4//lRjdqbbqmpXVz7TyZ/tzmemcSZVBzxs9p8ddcaL8VKH8WK81GXMGDN90/4exCbHIL6GYnLKQynWCH8asAM4s8E8JEmSBtuSERqDmFL6n4h4LPCHwFrgB8B7UkqXNpWHJEnS4BuhW8wR8VrgWymlF1WOHRsRT0spfW5WFznq14p0yyWzyLAsev4D5670atf5g04q0h/9d+9rTNeNn7vvp+qi72VnPqdrMdS8d+Xqo2e+hmbPeFEdbYqX7tuEc4mXsd063zdemtemmPE3ZrgMwCSVJm8xnwk8tevYi4BPN5iHJEnSYBuFhbIjorrO4SGV10uAxwC7al80t4yXrZj6M7kVtbT8bG5xrX3C5M/mLYJuurzzs92ttOqg39w6m6oF1rNMOzuvs3zPqT+r5hgvqmPQ42W8Z2qaz6pZgx4z/sa0zwD0IDZxi/lrFJNTEvCb5aNqcwN5SJIkDYe8UHaLNTUGMSgqiFE5tgu4AXj5jGffdSNc/AZ44Pri9d6HlKXrUbu+986unMuvMDaLrzLVdP3ciruvcu282OlUi5FON1YkH+teBuGuG4t05UEzl1VTM15URxvjpbtnp9t08dJdNuOleW2MGX9jhsso9CCmlJYARMQu4J0ppf8371JJkiQNqxFbKPtw4GdzOnPlQXDca+C6LxWve7WEultNeVHS7hbRXPRqxW3+Wufr7q2Qcn7V/8CzafVr/owX1ZHjJW+bZrxoJv7GqO9Gq4J4C/AnEfEYoHpjPaWUntxgPpIkSYNryZKRGYMI8A/A0+kchwjF2ERJkiQBo9aD+BRgG/Bh4FbmUjE8slxG8dbrirRXt/jYss60X/tErjuhSLu79btVbzNM1Y0/1aBizY/xojryIsXGi2bL3xj1yyhMUqm4CbgopfTSBq8pSZI0XEZsksqZwJvKMYibUkr1F8jO9juyqTLN30yDe6vv5wVLuwcpO0C4v9oUL9lU/82Nl8XXpnjx92UwtClmMn9jBtscKogRcQzwd8AvAbcDHwRel1La2XwBm60gfpTitvK3ACLGhyKmlJLRKEmSBEUFscYklYhYBVwAXAmcChwBvI1i17rX9KOITVfcuieoDL68TVL3Zu29NmLvbqXlMSmZi5EOvzxOyHjRbPj7orr8jRkO9XsQXwysAJ6RUroD+EpE7A2cGRFnl8ca1WQF8UkNXkuSJGk41Z+kcjJwfldF8BzgLcDxwLkNlg5osIKYUrqoqWu1Ut6sPY/p2LW08zVMbqU5zmN0GS+qw3hRXcbMYKvfg3g0cGH1QEppS0RsK99rXwUxImbcWi+l9Pb55iNJkjQUao5BBFZRTEzpdlv5XuOaaE78NTOveWgFUZIkCdi06dLzY2zZ6sqh3SNiY+X1hpTShq7TetW1Yorj89ZEBXELo7BbynjXfJlGjwHBu+1VpG1cEkELy3hRHctWFOnOHUVqvGgm/sYMtJTSU2uechuwb4/j+9C7Z3He5l1BTCmta6AckiRJ6u1qirGG4yLiUGDP8r3GOWJ1vqrLBthK00yMF9VhvKguY2ZYnQecERF7pZTuLI89G7gH6Msk4SX9uKgkSZIa8z7gXuBTEXFSRJxOsYPd2/uxBiLYgzh7Bz2y83XeMD256bl6MF5UxwEP63xtvGgm/saMlJTSbRHxZOBdFEva3A68g6KS2BdWECVJkloupXQlcOJC5WcFca7ydkfSbBgvqsN4UV3GjBrmGERJkiR1sIIoSZKkDlYQJUmS1MEKoiRJkjpESou/S15E3AzcsNjlUOsdllJaY7xolowX1XFYSmkN+G+SZmU8XoZVKyqIkiRJag9vMUuSJKlDK9ZBXL16/7Ru7aGLXQy13Kb/uWxrSmmN8aLZMF5UR44X8N8kzWzzlh+wdestsdjl6KdWVBDXrT2Ujf/xlcUuhlouVh5wAxgvmh3jRXXkeAFjRjNb/8SnLHYR+s5bzJIkSerQih5EDYizDpjd5159U3/LocFgvKgO40V1GTN9ZQ+iJEmSOlhBlCRJUgdvMWt6s+3Cl8B4UT3Gi+oyZhaMPYiSJEnqYAVRkiSp5SLiyIh4f0RcFhE7I+Jr/czPW8ySJEntdyxwCvAtYHm/M7OCqOZVx4i4vIBmYryoDuNFdQ1PzJybUvosQER8Aljdz8z6VkGMiDHgYICU0pZ+5SNJkjTsUkq7FjK/fvYgHglcBezqcz7qp2pry9ljmonxojqMF9VlzCyYhZikMtSbWUuSJA2bfvbsfQ84vI/XlyRJGjgRkboOXQFsr7zekFLasIBFmqRvFcSU0v3ADf26viRJ0qAaqzzfCdtTSusXrTA9NHaLOQovj4grI+KuiLiqfO1ai5IkSaUAllUebdRkD+IbgFcyMebwIcDZwP7AnzeYj9pusJcR0EIzXlSH8aK6WhgzQWcPYhs1WUF8PrAD+GvgSooFHV9RHreCKEmSVKp7ezUi9qBYKBuKZQT3johnlq+/mFLa1ljhaLaCuAz4WErpNflARBzCxJeRJEkaecGcKmAHAB/vOpZfHw5snk+ZujVZQXw/8JSIGEsp7YyIpcBDy+OSJElibhXElNJmFnDpwHlXECPiwvwUeBTwo4j4HnAExfjDu+abhxaRC5GqDuNFdRgvqmuIYmYUxiCe0PX6gPKRHd9AHpIkSUNhVCapvK6Ba0iSJI2EkaggppSsIGpq+XZAC5cZUAsZL6rDeFFdLYqZtlcQG13EOiJOiIhPR8TGiPhURJzY5PUlSZIGXZ6kkh9t1Fi5IuKJwFcoKp15wsqvR8STU0oXN5WP+qyJAcC9rtGiVpsaZLyoDuNFdQ1pzMxxmZsF1WQP4pkUPaZfAN4MnFu+fm2DeUiSJA28scqjjZqswD4cODeldGo+EBGfBR7XYB7ql34vHWDLfrgYL6rDeFFdQx4zIzFJpSKA+7uO3c8CLuooSZLUdoNwi7nJ8l0BPD0i/ql8fgzwdOCSBvPQoHKMkOowXlSH8aK6WhAzo9SD+FfA+cDvlK9zz+EbGsxDkiRpoA3CLebGJqmklC4ATgX+Hfhemf5GSukrTeUhSZI06HIFcegnqUTEMuAtwDUppZOauKYWyBDta6kFYLyoDuNFdY1QzLS1Ypg10oOYUtoB/D7w801cT5IkaVgFsKzyaKMmxyB+GnhcRIyllHY2eF31wwi10tQA40V1GC+qa8RiZhDGIDZZQdwdeBhwXUR8E9heHk8ppRc2mI8kSdJAG6UK4jPL9LDykSgqyQmwgriY2tQya8HSApqB8aI6jBfVZcwQNLuVXT80WUH8KEVlUJIkSVPIYxDbrLEKYkrptKaupYa0qZWm9jNeVIfxorqMmXGjNgaRiDgY+D1gLbAF+JeU0g+bzEOSJGnQjUwFMSKeBHyeYrJK9pcR8esppQubykeSJGmQDUIPYpNjJN8JrAB+AHy1TFcAb28wD0mSpIE3EjuplB4MfAM4LqW0KyLGgIuBRzSYhyRJ0kAbqUkqwNeBn6aUdgGklHZGxGbgrgbz0LBwOQrVYbyoDuNFdS1wzIzaMjffAF4ZETcBVwHHAL8JnBURz8sfSil9tME8JUmSBkrQ8CzhPmiyfH9BsQ7iH1eOBXBm5XWiWC9R/eRSAqrDeFEdxovqMmZ6auvYw6zJCuIWXChbkiRpWiPVg5hSWtfUtVTR3fKqjo+wVaZuxovqMF5UlzHTiEFY5qbtFVhJkqShYwVRkiRJ4+xBVH0zTbW3C19VxovqMF5UlzHTN1YQJUmSNG7UFspWE3IrbVRaZS5oOz/Gi+owXlSXMdMXI3GLuboI9lRcHFuSJGnCKOyk8hGmX//QxbGnMyqtsplU/w629qdmvBSMl9kxXgrGy+wZM4U+x8yorIPoAtmSJEmzNBIVRBfIVuMcN6Q6jBfVYbyorj7EzEiMQZQkSVI9ba8gNjZGMiJWRcRHIuLHEbGz8ri/qTwkSZIGXe5BzI82arIH8R3AjDOapVnzVpDqMF5Uh/GiuhqOmbZWDLMmZ1n/CsWElfMpJq38EXAb8IoG85AkSRpoeaHs/GijJnsQ9wc+BNwN/DLwHuDRwK9T9C5Kc+OyC6rDeFEdxovqOusAuHF+lxi1SSp3luktZXoa8HDgmAbzkCRJGmiDUEFs8hbzZuAw4DKK7/5B4JEUt50lSZJUqjtJJSKOiYivRsS2ckLw6yNi2tMjYl1EpB6Pc2bKr8kexDdQVBDPA86luLV8B/CyBvOQJEkaaHUXyo6IVcAFwJXAqcARwNsoOvpeM4tLvAL4euX11plOaKyCmFL6dOXlqRGxN3B3SmlnU3loxHTPFHuTY4U0DeNFdRgvqqsaM196yrwuNYdbzC8GVgDPSCndAXylrGedGRFnl8emc01K6Vt1Mmx0oeyIWAc8ClhZOUZKyb2YJUmSSjUriCcD53dVBM8B3gIcT3HntlGNVRAj4g+Ad9L7O1tBlCRJYk49iEcDF1YPpJS2RMS28r2ZKogfjoj9gJuAfwVenVK6Z7oTmuxBfHV5vTuA2ynWQlQvLqswOy5kWzBeZsd4KRgvs2O8TDBmZqfBmJlDBXEVRd2q223le1O5F3g38GWK+tkJwJ9RjGE8dboMm6wgrgS+lFI6pcFrSpIkDZW8UHbF6ojYWHm9IaW0oeu0Xh1vMcXx4oSUbgT+sHLoaxHxU+A9EfGIlNL/TnVukxXEjwFHNXi94WHrTHUYL6rDeFFdxkwrdPUgbk0prZ/m47cB+/Y4vg+9exan8wmKzUweBSxIBXFf4IkRcTlwKXB/eTyllF7YYD6SJEkDK4Cxag1x5vVerqYYazhxjYhDgT3L9+pIXWlPTVYQn1mmx5SPxETX52hVEG2dqQ7jRXUYL6rLmGmfgCXVGtjMFcTzgDMiYq+UUt657tnAPcBFNXPP9bVN032oyQriR3FiiiRJ0rQiYNnyyoF7ZzzlfcBLgU9FxFuABwFnAm+vLn0TEdcBF+U7txFxJrAXxSLZdwDHAWcAn0opfXu6DJtcKPu0pq4lSZI0rCJgrEYNLKV0W0Q8GXgXxZI2twPvoKgkVi2lc3jj1RS7qLyIYqHtLcBbgbNmyrPphbIfQrHa96FlITaklOreG5ckSRpeNSuIACmlK4ETZ/jMuq7X51AsqF1bkwtl/xzwDWAPJsYe/t+IeFxK6bKm8pEkSRpkdXsQF8OSBq91FsVsmsspaqvfoejO/KsG85AkSRpoQVFBzI82arJY6ykGRj4pH4iIC4HHNJiHJEnSQIslXZNUWqjJHsQ9gB92HfsRRS+iJEmSSkuWTjzaqMliXQs8KyJuAK6gWAvxWUyzSrckSdKoiYClLa0YZk0W768pxh6+quv4OxrMo91cjLQ/hvXvOqzfa7EN6991WL/XYhvmv+swf7fFdNYBcOM8rzEAk1SaXAfx3yLiAcDLKJa5+QHwN+UUa0mSJFH2ILZ8DGKj9deU0t8Bf9fkNVvLltlkr75p9p8dtb/fqH3f2TBepjZq33c2jJfpjeJ3nkmLY2YQlrmZd/Ei4nnAlRRjDntKKX10vvlIkiQNhVGoIAIfBv4G+OMp3k8U+zRLkiSNvJHoQaTYUu82ijGHqYHrqWm9utkX+3ZEd5kWuzyaYLyoDuNFdRkz4wtlt9m8i5dSOrx86o4pkiRJMxiEhbKb3Iv5QuDjKaX3Vo6dChyXUnp5U/ksusVu5TStziDefqqWo/tvnN970wD+7Y2X/jBeBoPx0n/GTH/MFDNfesq8s2h7D2KTO6mcADy469iJFMveSJIkiYkxiEO9F3NEvLby8rGV10uApwH3zTePVrCVtvAGoYxTMV4W3iCUcSrGy8IbhDJOx5hZeE2WMSBaWjHMmijemRSTUxLwi+UjC2BjA3lIkiQNhwBGYAzixRSVw+OBHwHXlcd3AjcAZzeQx+IZ5FbaILTIehnUcoPxshgGtdxgvCyGQS13ZswsvH6UO2h4q5LmNTGL+QSAiNgMfDCl9Ib5XlOSJGlojUIFMUsprWvqWpIkSUNrFCqIEXE98CHgBVN8JKWUjphvPn0xyF31WnjGi+owXlSXMTM6RqGCCKwD9i/TXtxdRZIkKRuRSSrPB64E/reBa83dbFpegzpAVs0zXlSH8aK6jBlNZxR6EFNK/1A+/e/5XkuSJGkkDHsFMSKeN9NnUkofnW8+U5rLmA3HeYwu40V1GC+qy5jRbIxCDyLwEWYeZ9i/CqIkSdIgiSWwfEXlwN2LVpSpNFFB3MJEBfFQYBewFVgNjFEslt2c+bS0hqGV5piVeoyXxS7BYDFeFrsEg8eYWewSDKYIWLp75UD7KohL5nuBlNK6lNLhwNuBa4AHppQeCBxcvn73fPOQJEkaGrGkqCDmRwvNu4JY8UrgmymlrQAppZuBbwIvbzAPSZKkwTYAFcQmh0juBvxWRHwDuAo4Bvgt4N45X3EYut/nKnfbj/LfoK5R/lsZL/WN8t/KeJmbUf57GTPNmnSLuX2arCB+CngR8IHKsQDOaTAPSZKkwRZjsHzlYpdiWk1WEF8K3A+cBuwObKeY4fyK2leyhTLBAcAzM14mGC8zM14mGC+zY8xMMGaaMUo9iCml7cAfRMRLKGYwb00puc2eJElSVR6D2GKNLtMYEXsCDwFWlq8BSCldPKsL2EpTHcaL6jBeVJcxo74ZoR7EiHgG8CFgr663UpP5SJIkDbQlozUG8a+BvXscjwbzGH6O71AdxovqMF5UlzHTJ+2/xdzkOogHAN8AVqeUllQfDeYhSZI02PIklRFZB/E8YLeU0q0NXlOSJGm4jNgklZuAF0fEF4GNFEveAJBSev2srtD0QpxtW9jTrvpmGS+qw3hRXcaM+mWUlrkB/j+KCSlPBX6l673ZVRAlSZKG3YgtlH0xRQVxcfVqEbWt1ab2MF5Uh/GiuowZ9TJKPYgppROaupYkSdLQGrExiETE/sBzgEOBLcC/pJS2znjijZctTEtqqvEWC9WKy/k47mN+jBfVYbyoLmNGfTdCFcSIOAz4T2BN5fCrI+IXU0qbm8pHkiRpoC1ZMlJjEN9IsRbiVuA64AiKyuJZwO9Ne+ZBPw+v/srijcfo1XpybEh7GS+qw3hRXcaM+q79PYhNLmL9ROBS4NCU0uOAtcCm8rgkSZJgTgtlR8QxEfHViNgWET+OiNdHxFi/ithkBXEVcFlK6V6AMv12eVySJEkwMUlllhXEiFgFXECxWsypFMsHvhx4Xb+K2OQt5u8Bz4qIbwJXAMcAzyqPz85cpv73a3CtyxC0n/GiOowX1WXMqF/qz2J+MbACeEZK6Q7gKxGxN4YNzdcAAAL1SURBVHBmRJxdHmtUkz2I7wf2LNNLgA3AHmUqSZIkKCqIy1dOPGZ2MnB+V0XwHIpK4/H9KGKTPYjvB45kopa7HXgf8N7aV3LKveowXlSH8aK6jBk1rX4P4tHAhdUDKaUtEbGtfO/cBksHNLtQ9i7g5RHxSorZy1tTSvc1dX1JkqShUH8nlVXA7T2O30af5nrMu4IYEU8Cfh14b0rpuymlHcCPI+KIiHgJ8PmU0oXTX6XFmhz3YSt0+BkvqsN4UV3GzHCY3IO4OiI2Vl5vSCl1D9HrtZ1xTHF83proQXwVcBTwiq7j3weeDhxLV7eoJEnSyIpJC2VvTSmtn+aM24B9exzfh949i/PWRAXx4cCF5S3mcSmlXRHxDeApDeQhSZI0FDZtuvT8GFu2unJopm2Jr6YYazguIg6lmBx8dcPFA5qpIK4C7p3ivR0UtVtJkiQBKaWn1jzlPOCMiNgrpXRneezZwD3ARY0WrtTEMjc/BZ4UESuqByNiD+BE4OYG8pAkSRpV76PojPtURJwUEacDZwJv78caiNBMD+LFwO8A50fEGynGHh4OvBo4BPjnBvIYLA78VR3Gi+owXlSXMTPwUkq3RcSTgXdRLGlzO/AOikpiXzRRQXwz8Ezg8cAXKseDorZ7dgN5SJIkjayU0pUUd2YXxLwriCmlyyPiN4G/B6rz7m8CXphSuny+eQwMW2mqw3hRHcaL6jJmNA+NLJSdUvpCRBxG0Yt4IMW4xEtSSlNNXpEkSVJLNbmTyr0M83qH3S0xN0zXdIwX1WG8qC5jRn3WxCxmSZIkDZHGehBHjmM7VIfxojqMF9VlzKhh9iBKkiSpgxVESZIkdbCCKEmSpA5WECVJktQhUkqLXQYi4mbghsUuh1rvsJTSGuNFs2S8qI7DUkprwH+TNCvj8TKsWlFBlCRJUnt4i1mSJEkdrCBKkiSpgxVESZIkdbCCKEmSpA5WECVJktTBCqIkSZI6WEGUJElSByuIkiRJ6mAFUZIkSR3+fz/MskGFJj+tAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 720x576 with 15 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#cmap = 'jet'\n",
    "cmap = \"gist_heat_r\"\n",
    "\n",
    "inducing = 'ind'\n",
    "f, ((ax01,ax02,ax03,ax04),(ax3, ax5, ax7, ax9),(ax10,ax11,ax12,ax13)) = plt.subplots(3, 4, sharex = 'col', sharey = 'row')\n",
    "\n",
    "xmin, xmax, ymin, ymax = np.amin(data_final_with_na[fold,:,1]), np.amax(data_final_with_na[fold,:,1]), np.amin(data_final_with_na[fold,:,0]), np.amax(data_final_with_na[fold,:,0])\n",
    "extent = xmin, xmax, ymin, ymax\n",
    "\n",
    "f.set_figheight(8)\n",
    "f.set_figwidth(10)\n",
    "\n",
    "\n",
    "color_max = np.amax(((((outputs[:,0].reshape(N,N))*cell_inside)[~np.isnan(outputs[:,0].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,1].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,1].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,2].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,2].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,3].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,3].reshape(N,N)*cell_inside)])))\n",
    "\n",
    "color_min = np.amin((((outputs[:,0].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,0].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,1].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,1].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,2].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,2].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,3].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,3].reshape(N,N)*cell_inside)])))\n",
    "color_min = color_min - 0.2\n",
    "\n",
    "# masked_array1 = np.ma.array(na_task1, mask=np.isnan(outputs[:,0].reshape(N,N)))\n",
    "# masked_array2 = np.ma.array(na_task2, mask=np.isnan(outputs[:,1].reshape(N,N)))\n",
    "# masked_array3 = np.ma.array(na_task3, mask=np.isnan(outputs[:,2].reshape(N,N)))\n",
    "# masked_array4 = np.ma.array(na_task4, mask=np.isnan(outputs[:,3].reshape(N,N)))\n",
    "\n",
    "\n",
    "# cmap1 = matplotlib.cm.gray\n",
    "# cmap1.set_bad('white',alpha = 0.0)\n",
    "\n",
    "# ax01.imshow(outputs[:,0].reshape(N,N)*cell_inside, \n",
    "#                  aspect = 'auto', cmap=cmap, interpolation=plot_interpolation, vmin = color_min, vmax = (color_max),\n",
    "#           extent=extent)\n",
    "\n",
    "# ax01.imshow(masked_array1, interpolation='nearest', cmap = cmap1, alpha = transparency,\n",
    "#           extent=extent)\n",
    "\n",
    "# ax01.set_yticks([]) \n",
    "# ax01.set_xticks([]) \n",
    "# ax01.set_title('GT 9', size=15)\n",
    "# ax01.set_ylabel('Training obs.', fontweight=\"bold\")\n",
    "\n",
    "\n",
    "\n",
    "# ax02.imshow(outputs[:,1].reshape(N,N)*cell_inside, \n",
    "#                  aspect = 'auto', cmap=cmap, interpolation=plot_interpolation, vmin = color_min, vmax = (color_max),\n",
    "#           extent=extent)\n",
    "\n",
    "# ax02.imshow(masked_array2, interpolation='nearest', cmap = cmap1, alpha = transparency,\n",
    "#           extent=extent)\n",
    "# # ax2.spines['top'].set_visible(False)\n",
    "# # ax2.spines['right'].set_visible(False)\n",
    "# ax02.set_yticks([]) \n",
    "# ax02.set_xticks([]) \n",
    "# #ax2.title.set_text('GT 12')\n",
    "# ax02.set_title('GT 12', size=15)\n",
    "\n",
    "\n",
    "# ax03.imshow(outputs[:,2].reshape(N,N)*cell_inside, \n",
    "#                  aspect = 'auto', cmap=cmap, interpolation=plot_interpolation, vmin = color_min, vmax = (color_max),\n",
    "#           extent=extent)\n",
    "\n",
    "# ax03.imshow(masked_array3, interpolation='nearest', cmap = cmap1, alpha = transparency,\n",
    "#           extent=extent)\n",
    "# # ax3.spines['top'].set_visible(False)\n",
    "# # ax3.spines['right'].set_visible(False)\n",
    "# ax03.set_yticks([]) \n",
    "# ax03.set_xticks([]) \n",
    "# #ax3.title.set_text('GT 15')\n",
    "# ax03.set_title('GT 15', size=15)\n",
    "\n",
    "\n",
    "\n",
    "img = ax04.imshow(outputs[:,3].reshape(N,N)*cell_inside, \n",
    "                 aspect = 'auto', cmap=cmap, interpolation=plot_interpolation, vmin = color_min, vmax = (color_max),\n",
    "          extent=extent)\n",
    "\n",
    "# ax04.imshow(masked_array4, interpolation='nearest', cmap = cmap1, alpha = transparency,\n",
    "#           extent=extent)\n",
    "# # ax4.spines['top'].set_visible(False)\n",
    "# # ax4.spines['right'].set_visible(False)\n",
    "\n",
    "# ax04.set_yticks([]) \n",
    "# ax04.set_xticks([]) \n",
    "# ax04.set_title('GT 20', size=15)\n",
    "# # ax4.title.set_text('GT 20', size=20)\n",
    "\n",
    "\n",
    "bounds = [0, 6.5, 13]\n",
    "cax = f.add_axes([0.9, 0.65, 0.05, 0.2], aspect=30)\n",
    "cbar = plt.colorbar(img, cax=cax, ticks = bounds)\n",
    "cbar.ax.set_yticklabels(['0', '6.5', '13'])  # vertically oriented colorbar\n",
    "cbar.ax.tick_params(labelsize=15)\n",
    "\n",
    "\n",
    "color_max = np.amax((np.concatenate((MT_pred_vector[fold,:,0].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,0].reshape(N_all,))],\n",
    "                                    MT_pred_vector[fold,:,1].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,1].reshape(N_all,))],\n",
    "                                    MT_pred_vector[fold,:,2].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,2].reshape(N_all,))],\n",
    "                                    MT_pred_vector[fold,:,3].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,3].reshape(N_all,))]))))\n",
    "\n",
    "color_min = np.amin((np.concatenate((MT_pred_vector[fold,:,0].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,0].reshape(N_all,))],\n",
    "                                    MT_pred_vector[fold,:,1].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,1].reshape(N_all,))],\n",
    "                                    MT_pred_vector[fold,:,2].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,2].reshape(N_all,))],\n",
    "                                    MT_pred_vector[fold,:,3].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,3].reshape(N_all,))]))))\n",
    "\n",
    "\n",
    "color_min = color_min - 0.2\n",
    "im1 = ax3.imshow(MT_pred_vector[fold,:,0].reshape(64,64)* cell_inside, extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax3.grid(False)\n",
    "ax3.xaxis.set_visible(True)\n",
    "ax3.tick_params(labelsize=8)\n",
    "#ax3.title.set_text('GT 9')\n",
    "ax3.set_yticks([]) \n",
    "ax3.set_xticks([]) \n",
    "ax3.set_ylabel('Intensity surface', fontweight=\"bold\")\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "ax5.imshow(MT_pred_vector[fold,:,1].reshape(64,64)* cell_inside, extent=extent, \n",
    "           aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax5.grid(False)\n",
    "ax5.xaxis.set_visible(True)\n",
    "ax5.tick_params(labelsize=8)\n",
    "#ax5.title.set_text('GT 12')\n",
    "ax5.set_yticks([]) \n",
    "ax5.set_xticks([]) \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "ax7.imshow(MT_pred_vector[fold,:,2].reshape(64,64)* cell_inside, extent=extent, \n",
    "           aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax7.grid(False)\n",
    "ax7.xaxis.set_visible(True)\n",
    "ax7.tick_params(labelsize=8)\n",
    "#ax7.title.set_text('GT 15')\n",
    "ax7.set_yticks([]) \n",
    "ax7.set_xticks([]) \n",
    "\n",
    "\n",
    "\n",
    "ax9.imshow(MT_pred_vector[fold,:,3].reshape(64,64)* cell_inside, extent=extent, \n",
    "           aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax9.grid(False)\n",
    "ax9.xaxis.set_visible(True)\n",
    "ax9.tick_params(labelsize=8)\n",
    "#ax9.title.set_text('GT 20')\n",
    "ax9.set_yticks([]) \n",
    "ax9.set_xticks([]) \n",
    "\n",
    "\n",
    "bounds = [color_min, (color_max-color_min)/2, color_max]\n",
    "cax2 = f.add_axes([0.9, 0.40, 0.05, 0.2], aspect=30)\n",
    "cbar = plt.colorbar(im1, cax=cax2, ticks = bounds)\n",
    "cbar.ax.set_yticklabels(['0', '3.8', '7.8'])  # vertically oriented colorbar\n",
    "cbar.ax.tick_params(labelsize=15)\n",
    "\n",
    "######\n",
    "color_max = 1\n",
    "color_min = 0 -0.02\n",
    "\n",
    "im2 = ax10.imshow(cp1_MTCP* cell_inside, extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax10.grid(False)\n",
    "ax10.xaxis.set_visible(True)\n",
    "ax10.tick_params(labelsize=8)\n",
    "ax10.set_yticks([]) \n",
    "ax10.set_xticks([]) \n",
    "ax10.set_ylabel('Conditional prob.', fontweight=\"bold\")\n",
    "\n",
    "\n",
    "\n",
    "ax11.imshow(cp2_MTCP* cell_inside, extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax11.grid(False)\n",
    "ax11.xaxis.set_visible(True)\n",
    "ax11.tick_params(labelsize=8)\n",
    "ax11.set_yticks([]) \n",
    "ax11.set_xticks([]) \n",
    "\n",
    "ax12.imshow(cp3_MTCP* cell_inside, extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax12.grid(False)\n",
    "ax12.xaxis.set_visible(True)\n",
    "ax12.tick_params(labelsize=8)\n",
    "ax12.set_yticks([]) \n",
    "ax12.set_xticks([]) \n",
    "\n",
    "ax13.imshow(cp4_MTCP* cell_inside, extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax13.grid(False)\n",
    "ax13.xaxis.set_visible(True)\n",
    "ax13.tick_params(labelsize=8)\n",
    "ax13.set_yticks([]) \n",
    "ax13.set_xticks([]) \n",
    "\n",
    "\n",
    "\n",
    "bounds = [0, 0.5, 1]\n",
    "cax2 = f.add_axes([0.9, 0.15, 0.05, 0.2], aspect=30)\n",
    "cbar = plt.colorbar(im2, cax=cax2, ticks = bounds)\n",
    "cbar.ax.set_yticklabels(['0', '0.5', '1'])  # vertically oriented colorbar\n",
    "cbar.ax.tick_params(labelsize=15)\n",
    "\n",
    "\n",
    "f.subplots_adjust(hspace=0.02)\n",
    "f.subplots_adjust(wspace=0.02)\n",
    "\n",
    "\n",
    "#name = \"BTB_missing_exp_inducing\"+ inducing + str(cmap)\n",
    "#f.savefig(name + '.png')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Plot missing setting for paper"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('colormax', 30.759510040283203)\n",
      "('color_min', 13.187155723571777)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x561.6 with 15 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "### cmap = 'jet'\n",
    "cmap = \"gist_heat_r\"\n",
    "\n",
    "inducing = 'ind'\n",
    "f, ((ax01,ax02,ax03,ax04),(ax3, ax5, ax7, ax9),(ax10,ax11,ax12,ax13)) = plt.subplots(3, 4, sharex = 'col', sharey = 'row')\n",
    "\n",
    "xmin, xmax, ymin, ymax = np.amin(data_final_with_na[fold,:,1]), np.amax(data_final_with_na[fold,:,1]), np.amin(data_final_with_na[fold,:,0]), np.amax(data_final_with_na[fold,:,0])\n",
    "extent = xmin, xmax, ymin, ymax\n",
    "\n",
    "f.set_figheight(7.8)\n",
    "f.set_figwidth(10)\n",
    "\n",
    "\n",
    "color_max = np.amax(((((outputs[:,0].reshape(N,N))*cell_inside)[~np.isnan(outputs[:,0].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,1].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,1].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,2].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,2].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,3].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,3].reshape(N,N)*cell_inside)])))\n",
    "\n",
    "color_min = np.amin((((outputs[:,0].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,0].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,1].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,1].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,2].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,2].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,3].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,3].reshape(N,N)*cell_inside)])))\n",
    "color_min = color_min - 0.5\n",
    "\n",
    "masked_array1 = np.ma.array(na_task1, mask=np.isnan(outputs[:,0].reshape(N,N)))\n",
    "masked_array2 = np.ma.array(na_task2, mask=np.isnan(outputs[:,1].reshape(N,N)))\n",
    "masked_array3 = np.ma.array(na_task3, mask=np.isnan(outputs[:,2].reshape(N,N)))\n",
    "masked_array4 = np.ma.array(na_task4, mask=np.isnan(outputs[:,3].reshape(N,N)))\n",
    "\n",
    "\n",
    "#### DATA\n",
    "\n",
    "ax01.imshow(outputs[:,0].reshape(N,N)*cell_inside, \n",
    "                 aspect = 'auto', cmap=cmap, interpolation=plot_interpolation, vmin = color_min, vmax = (color_max),\n",
    "          extent=extent)\n",
    "\n",
    "#ax01.imshow(masked_array1, interpolation='nearest', cmap = cmap1, alpha = transparency,\n",
    "#          extent=extent)\n",
    "\n",
    "ax01.set_yticks([]) \n",
    "ax01.set_xticks([]) \n",
    "ax01.set_title('GT 9', size=15)\n",
    "#ax01.set_ylabel('Training obs.', fontweight=\"bold\")\n",
    "\n",
    "\n",
    "\n",
    "ax02.imshow(outputs[:,1].reshape(N,N)*cell_inside, \n",
    "                 aspect = 'auto', cmap=cmap, interpolation=plot_interpolation, vmin = color_min, vmax = (color_max),\n",
    "          extent=extent)\n",
    "\n",
    "#ax02.imshow(masked_array2, interpolation='nearest', cmap = cmap1, alpha = transparency,\n",
    " #         extent=extent)\n",
    "# ax2.spines['top'].set_visible(False)\n",
    "# ax2.spines['right'].set_visible(False)\n",
    "ax02.set_yticks([]) \n",
    "ax02.set_xticks([]) \n",
    "#ax2.title.set_text('GT 12')\n",
    "ax02.set_title('GT 12', size=15)\n",
    "\n",
    "\n",
    "ax03.imshow(outputs[:,2].reshape(N,N)*cell_inside, \n",
    "                 aspect = 'auto', cmap=cmap, interpolation=plot_interpolation, vmin = color_min, vmax = (color_max),\n",
    "          extent=extent)\n",
    "\n",
    "#ax03.imshow(masked_array3, interpolation='nearest', cmap = cmap1, alpha = transparency,\n",
    " #         extent=extent)\n",
    "# ax3.spines['top'].set_visible(False)\n",
    "# ax3.spines['right'].set_visible(False)\n",
    "ax03.set_yticks([]) \n",
    "ax03.set_xticks([]) \n",
    "#ax3.title.set_text('GT 15')\n",
    "ax03.set_title('GT 15', size=15)\n",
    "\n",
    "\n",
    "\n",
    "img = ax04.imshow(outputs[:,3].reshape(N,N)*cell_inside, \n",
    "                 aspect = 'auto', cmap=cmap, interpolation=plot_interpolation, vmin = color_min, vmax = (color_max),\n",
    "          extent=extent)\n",
    "\n",
    "#ax04.imshow(masked_array4, interpolation='nearest', cmap = cmap1, alpha = transparency,\n",
    "#          extent=extent)\n",
    "# ax4.spines['top'].set_visible(False)\n",
    "# ax4.spines['right'].set_visible(False)\n",
    "\n",
    "ax04.set_yticks([]) \n",
    "ax04.set_xticks([]) \n",
    "ax04.set_title('GT 20', size=15)\n",
    "# ax4.title.set_text('GT 20', size=20)\n",
    "\n",
    "\n",
    "#### MT predictions\n",
    "\n",
    "bounds = [0, 6.5, 13]\n",
    "cax = f.add_axes([0.9, 0.65, 0.05, 0.2], aspect=30)\n",
    "cbar = plt.colorbar(img, cax=cax, ticks = bounds)\n",
    "cbar.ax.set_yticklabels(['0', '6.5', '13'])  # vertically oriented colorbar\n",
    "cbar.ax.tick_params(labelsize=15)\n",
    "\n",
    "\n",
    "color_max = np.amax((np.concatenate((MT_pred_vector[fold,:,0].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,0].reshape(N_all,))],\n",
    "                                    MT_pred_vector[fold,:,1].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,1].reshape(N_all,))],\n",
    "                                    MT_pred_vector[fold,:,2].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,2].reshape(N_all,))],\n",
    "                                    MT_pred_vector[fold,:,3].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,3].reshape(N_all,))]))))\n",
    "\n",
    "color_min = np.amin((np.concatenate((MT_pred_vector[fold,:,0].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,0].reshape(N_all,))],\n",
    "                                    MT_pred_vector[fold,:,1].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,1].reshape(N_all,))],\n",
    "                                    MT_pred_vector[fold,:,2].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,2].reshape(N_all,))],\n",
    "                                    MT_pred_vector[fold,:,3].reshape(N_all,)[~np.isnan(MT_pred_vector[fold,:,3].reshape(N_all,))]))))\n",
    "\n",
    "print('colormax', color_max)\n",
    "print('color_min', color_min)\n",
    "color_min = color_min - 0.2\n",
    "im1 = ax3.imshow(MT_pred_vector[fold,:,0].reshape(64,64)* cell_inside, extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax3.grid(False)\n",
    "ax3.xaxis.set_visible(True)\n",
    "ax3.tick_params(labelsize=8)\n",
    "#ax3.title.set_text('GT 9')\n",
    "ax3.set_yticks([]) \n",
    "ax3.set_xticks([]) \n",
    "ax3.set_ylabel('MCPM', fontweight=\"bold\")\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "ax5.imshow(MT_pred_vector[fold,:,1].reshape(64,64)* cell_inside, extent=extent, \n",
    "           aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax5.grid(False)\n",
    "ax5.xaxis.set_visible(True)\n",
    "ax5.tick_params(labelsize=8)\n",
    "#ax5.title.set_text('GT 12')\n",
    "ax5.set_yticks([]) \n",
    "ax5.set_xticks([]) \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "ax7.imshow(MT_pred_vector[fold,:,2].reshape(64,64)* cell_inside, extent=extent, \n",
    "           aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax7.grid(False)\n",
    "ax7.xaxis.set_visible(True)\n",
    "ax7.tick_params(labelsize=8)\n",
    "#ax7.title.set_text('GT 15')\n",
    "ax7.set_yticks([]) \n",
    "ax7.set_xticks([]) \n",
    "\n",
    "\n",
    "\n",
    "ax9.imshow(MT_pred_vector[fold,:,3].reshape(64,64)* cell_inside, extent=extent, \n",
    "           aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax9.grid(False)\n",
    "ax9.xaxis.set_visible(True)\n",
    "ax9.tick_params(labelsize=8)\n",
    "#ax9.title.set_text('GT 20')\n",
    "ax9.set_yticks([]) \n",
    "ax9.set_xticks([]) \n",
    "\n",
    "\n",
    "bounds = [color_min, (color_max-color_min)/2, color_max]\n",
    "cax2 = f.add_axes([0.9, 0.40, 0.05, 0.2], aspect=30)\n",
    "cbar = plt.colorbar(im1, cax=cax2, ticks = bounds)\n",
    "cbar.ax.set_yticklabels(['0', '2', '4'])  # vertically oriented colorbar\n",
    "cbar.ax.tick_params(labelsize=15)\n",
    "\n",
    "#### Predictions ST\n",
    "\n",
    "color_max = np.amax((np.concatenate((posterior_mean[fold,:,0].reshape(N_all,)[~np.isnan(posterior_mean[fold,:,0].reshape(N_all,))],\n",
    "                                    posterior_mean[fold,:,1].reshape(N_all,)[~np.isnan(posterior_mean[fold,:,1].reshape(N_all,))],\n",
    "                                    posterior_mean[fold,:,2].reshape(N_all,)[~np.isnan(posterior_mean[fold,:,2].reshape(N_all,))],\n",
    "                                    posterior_mean[fold,:,3].reshape(N_all,)[~np.isnan(posterior_mean[fold,:,3].reshape(N_all,))]))))\n",
    "\n",
    "color_min = np.amin((np.concatenate((posterior_mean[fold,:,0].reshape(N_all,)[~np.isnan(posterior_mean[fold,:,0].reshape(N_all,))],\n",
    "                                    posterior_mean[fold,:,1].reshape(N_all,)[~np.isnan(posterior_mean[fold,:,1].reshape(N_all,))],\n",
    "                                    posterior_mean[fold,:,2].reshape(N_all,)[~np.isnan(posterior_mean[fold,:,2].reshape(N_all,))],\n",
    "                                    posterior_mean[fold,:,3].reshape(N_all,)[~np.isnan(posterior_mean[fold,:,3].reshape(N_all,))]))))\n",
    "\n",
    "color_min = color_min - 0.2\n",
    "im2 = ax10.imshow(posterior_mean[fold,:,0].reshape(N,N)* cell_inside, \n",
    "                  extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "                  vmin = color_min, vmax = color_max)\n",
    "ax10.grid(False)\n",
    "ax10.xaxis.set_visible(True)\n",
    "ax10.tick_params(labelsize=8)\n",
    "ax10.set_yticks([]) \n",
    "ax10.set_xticks([]) \n",
    "ax10.set_ylabel('ICM', fontweight=\"bold\")\n",
    "\n",
    "\n",
    "ax11.imshow(posterior_mean[fold,:,1].reshape(N,N)* cell_inside, extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax11.grid(False)\n",
    "ax11.xaxis.set_visible(True)\n",
    "ax11.tick_params(labelsize=8)\n",
    "ax11.set_yticks([]) \n",
    "ax11.set_xticks([]) \n",
    "\n",
    "\n",
    "\n",
    "ax12.imshow(posterior_mean[fold,:,2].reshape(N,N)* cell_inside, extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax12.grid(False)\n",
    "ax12.xaxis.set_visible(True)\n",
    "ax12.tick_params(labelsize=8)\n",
    "ax12.set_yticks([]) \n",
    "ax12.set_xticks([]) \n",
    "\n",
    "\n",
    "ax13.imshow(posterior_mean[fold,:,3].reshape(N,N)* cell_inside, extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax13.grid(False)\n",
    "ax13.xaxis.set_visible(True)\n",
    "ax13.tick_params(labelsize=8)\n",
    "ax13.set_yticks([]) \n",
    "ax13.set_xticks([]) \n",
    "\n",
    "\n",
    "\n",
    "bounds = [0, 1.5, 3.39]\n",
    "cax2 = f.add_axes([0.9, 0.15, 0.05, 0.2], aspect=30)\n",
    "cbar = plt.colorbar(im2, cax=cax2, ticks = bounds)\n",
    "cbar.ax.set_yticklabels(['0', '1.7', '3.4'])  # vertically oriented colorbar\n",
    "cbar.ax.tick_params(labelsize=15)\n",
    "\n",
    "\n",
    "f.subplots_adjust(hspace=0.02)\n",
    "f.subplots_adjust(wspace=0.02)\n",
    "\n",
    "\n",
    "#name = \"BTB_missing_exp_inducing_intensities_LGCPN_ICM\"+ inducing + str(cmap)\n",
    "#f.savefig(name + '.png')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "task = 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x561.6 with 15 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "### cmap = 'jet'\n",
    "cmap = \"gist_heat_r\"\n",
    "\n",
    "inducing = 'ind'\n",
    "f, ((ax01,ax02,ax03,ax04),(ax3, ax5, ax7, ax9),(ax10,ax11,ax12,ax13)) = plt.subplots(3, 4, sharex = 'col', sharey = 'row')\n",
    "\n",
    "xmin, xmax, ymin, ymax = np.amin(data_final_with_na[fold,:,1]), np.amax(data_final_with_na[fold,:,1]), np.amin(data_final_with_na[fold,:,0]), np.amax(data_final_with_na[fold,:,0])\n",
    "extent = xmin, xmax, ymin, ymax\n",
    "\n",
    "f.set_figheight(7.8)\n",
    "f.set_figwidth(10)\n",
    "\n",
    "\n",
    "color_max = np.amax(((((outputs[:,0].reshape(N,N))*cell_inside)[~np.isnan(outputs[:,0].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,1].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,1].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,2].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,2].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,3].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,3].reshape(N,N)*cell_inside)])))\n",
    "\n",
    "color_min = np.amin((((outputs[:,0].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,0].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,1].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,1].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,2].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,2].reshape(N,N)*cell_inside)],\n",
    "                                    (outputs[:,3].reshape(N,N)*cell_inside)[~np.isnan(outputs[:,3].reshape(N,N)*cell_inside)])))\n",
    "color_min = color_min - 0.5\n",
    "\n",
    "masked_array1 = np.ma.array(na_task1, mask=np.isnan(outputs[:,0].reshape(N,N)))\n",
    "masked_array2 = np.ma.array(na_task2, mask=np.isnan(outputs[:,1].reshape(N,N)))\n",
    "masked_array3 = np.ma.array(na_task3, mask=np.isnan(outputs[:,2].reshape(N,N)))\n",
    "masked_array4 = np.ma.array(na_task4, mask=np.isnan(outputs[:,3].reshape(N,N)))\n",
    "\n",
    "\n",
    "#### DATA\n",
    "\n",
    "ax01.imshow(outputs[:,0].reshape(N,N)*cell_inside, \n",
    "                 aspect = 'auto', cmap=cmap, interpolation=plot_interpolation, vmin = color_min, vmax = (color_max),\n",
    "          extent=extent)\n",
    "\n",
    "ax01.imshow(masked_array1, interpolation='nearest', cmap = cmap1, alpha = transparency,\n",
    "          extent=extent)\n",
    "\n",
    "ax01.set_yticks([]) \n",
    "ax01.set_xticks([]) \n",
    "ax01.set_title('GT 9', size=15)\n",
    "ax01.set_ylabel('Training obs.', fontweight=\"bold\")\n",
    "\n",
    "\n",
    "\n",
    "ax02.imshow(outputs[:,1].reshape(N,N)*cell_inside, \n",
    "                 aspect = 'auto', cmap=cmap, interpolation=plot_interpolation, vmin = color_min, vmax = (color_max),\n",
    "          extent=extent)\n",
    "\n",
    "ax02.imshow(masked_array2, interpolation='nearest', cmap = cmap1, alpha = transparency,\n",
    "          extent=extent)\n",
    "# ax2.spines['top'].set_visible(False)\n",
    "# ax2.spines['right'].set_visible(False)\n",
    "ax02.set_yticks([]) \n",
    "ax02.set_xticks([]) \n",
    "#ax2.title.set_text('GT 12')\n",
    "ax02.set_title('GT 12', size=15)\n",
    "\n",
    "\n",
    "ax03.imshow(outputs[:,2].reshape(N,N)*cell_inside, \n",
    "                 aspect = 'auto', cmap=cmap, interpolation=plot_interpolation, vmin = color_min, vmax = (color_max),\n",
    "          extent=extent)\n",
    "\n",
    "ax03.imshow(masked_array3, interpolation='nearest', cmap = cmap1, alpha = transparency,\n",
    "          extent=extent)\n",
    "# ax3.spines['top'].set_visible(False)\n",
    "# ax3.spines['right'].set_visible(False)\n",
    "ax03.set_yticks([]) \n",
    "ax03.set_xticks([]) \n",
    "#ax3.title.set_text('GT 15')\n",
    "ax03.set_title('GT 15', size=15)\n",
    "\n",
    "\n",
    "\n",
    "img = ax04.imshow(outputs[:,3].reshape(N,N)*cell_inside, \n",
    "                 aspect = 'auto', cmap=cmap, interpolation=plot_interpolation, vmin = color_min, vmax = (color_max),\n",
    "          extent=extent)\n",
    "\n",
    "ax04.imshow(masked_array4, interpolation='nearest', cmap = cmap1, alpha = transparency,\n",
    "          extent=extent)\n",
    "# ax4.spines['top'].set_visible(False)\n",
    "# ax4.spines['right'].set_visible(False)\n",
    "\n",
    "ax04.set_yticks([]) \n",
    "ax04.set_xticks([]) \n",
    "ax04.set_title('GT 20', size=15)\n",
    "# ax4.title.set_text('GT 20', size=20)\n",
    "\n",
    "bounds = [0, 6.5, 13.0]\n",
    "cax = f.add_axes([0.9, 0.65, 0.05, 0.2], aspect=30)\n",
    "cbar = plt.colorbar(img, cax=cax, ticks = bounds)\n",
    "cbar.ax.set_yticklabels(['0', '6.5', '13'])  # vertically oriented colorbar\n",
    "cbar.ax.tick_params(labelsize=15)\n",
    "\n",
    "\n",
    "#### MT predictions\n",
    "\n",
    "\n",
    "color_max = 1.0\n",
    "color_min = 0.0\n",
    "\n",
    "im1 = ax3.imshow(cp1_MTCP* cell_inside, extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax3.grid(False)\n",
    "ax3.xaxis.set_visible(True)\n",
    "ax3.tick_params(labelsize=8)\n",
    "#ax3.title.set_text('GT 9')\n",
    "ax3.set_yticks([]) \n",
    "ax3.set_xticks([]) \n",
    "ax3.set_ylabel('MCPM', fontweight=\"bold\")\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "ax5.imshow(cp2_MTCP* cell_inside, extent=extent, \n",
    "           aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax5.grid(False)\n",
    "ax5.xaxis.set_visible(True)\n",
    "ax5.tick_params(labelsize=8)\n",
    "#ax5.title.set_text('GT 12')\n",
    "ax5.set_yticks([]) \n",
    "ax5.set_xticks([]) \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "ax7.imshow(cp3_MTCP* cell_inside, extent=extent, \n",
    "           aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax7.grid(False)\n",
    "ax7.xaxis.set_visible(True)\n",
    "ax7.tick_params(labelsize=8)\n",
    "#ax7.title.set_text('GT 15')\n",
    "ax7.set_yticks([]) \n",
    "ax7.set_xticks([]) \n",
    "\n",
    "\n",
    "\n",
    "ax9.imshow(cp4_MTCP* cell_inside, extent=extent, \n",
    "           aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax9.grid(False)\n",
    "ax9.xaxis.set_visible(True)\n",
    "ax9.tick_params(labelsize=8)\n",
    "#ax9.title.set_text('GT 20')\n",
    "ax9.set_yticks([]) \n",
    "ax9.set_xticks([]) \n",
    "\n",
    "\n",
    "bounds = [0, 0.5, 1]\n",
    "cax2 = f.add_axes([0.9, 0.40, 0.05, 0.2], aspect=30)\n",
    "cbar = plt.colorbar(im1, cax=cax2, ticks = bounds)\n",
    "cbar.ax.set_yticklabels(['0', '0.5', '1.0'])  # vertically oriented colorbar\n",
    "cbar.ax.tick_params(labelsize=15)\n",
    "\n",
    "#### Predictions ST\n",
    "color_max = 1.0\n",
    "color_min = 0.0 -0.02\n",
    "\n",
    "im2 = ax10.imshow(cp1_ICM* cell_inside, \n",
    "                  extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "                  vmin = color_min, vmax = color_max)\n",
    "ax10.grid(False)\n",
    "ax10.xaxis.set_visible(True)\n",
    "ax10.tick_params(labelsize=8)\n",
    "ax10.set_yticks([]) \n",
    "ax10.set_xticks([]) \n",
    "ax10.set_ylabel('ICM', fontweight=\"bold\")\n",
    "\n",
    "\n",
    "ax11.imshow(cp2_ICM* cell_inside, extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax11.grid(False)\n",
    "ax11.xaxis.set_visible(True)\n",
    "ax11.tick_params(labelsize=8)\n",
    "ax11.set_yticks([]) \n",
    "ax11.set_xticks([]) \n",
    "\n",
    "\n",
    "\n",
    "ax12.imshow(cp3_ICM* cell_inside, extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax12.grid(False)\n",
    "ax12.xaxis.set_visible(True)\n",
    "ax12.tick_params(labelsize=8)\n",
    "ax12.set_yticks([]) \n",
    "ax12.set_xticks([]) \n",
    "\n",
    "\n",
    "ax13.imshow(cp4_ICM* cell_inside, extent=extent, aspect = 'auto', cmap=cmap, interpolation=plot_interpolation,\n",
    "          vmin = color_min, vmax = color_max)\n",
    "ax13.grid(False)\n",
    "ax13.xaxis.set_visible(True)\n",
    "ax13.tick_params(labelsize=8)\n",
    "ax13.set_yticks([]) \n",
    "ax13.set_xticks([]) \n",
    "\n",
    "\n",
    "\n",
    "bounds = [0, 0.5, 1.0]\n",
    "cax2 = f.add_axes([0.9, 0.15, 0.05, 0.2], aspect=30)\n",
    "cbar = plt.colorbar(im2, cax=cax2, ticks = bounds)\n",
    "cbar.ax.set_yticklabels(['0', '0.5', '1.0'])  # vertically oriented colorbar\n",
    "cbar.ax.tick_params(labelsize=15)\n",
    "\n",
    "\n",
    "f.subplots_adjust(hspace=0.02)\n",
    "f.subplots_adjust(wspace=0.02)\n",
    "\n",
    "\n",
    "#name = \"BTB_missing_exp_intensity_LGCPN_ICM\"+ inducing + str(cmap)\n",
    "#f.savefig(name + '.png')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Alternative computation of NLPL"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Use this if you want to compute the nlpl values by sampling from the posterior distributions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import outputs with missing data\n",
    "n_folds = 16\n",
    "method = 'MT'\n",
    "prior_mixing_weights = 'Normal'\n",
    "missing_exp = True\n",
    "data_final_with_na = np.loadtxt('../Data/btb_experiments/' + 'data_final_with_na_'+ prior_mixing_weights + \"_\" + method+ \"_\" + str(missing_exp)).reshape(n_folds, N_all, n_tasks + inputs_dimension)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "size is not compatible with inputs",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-57-905b03c9034b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     18\u001b[0m         \u001b[0mlatent_fun_sample\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfold\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnormal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlatent_means\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlatent_vars\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msize\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mn_samples\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mN_all\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn_latent\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     19\u001b[0m         \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mseed\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m         \u001b[0mweights_sample\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfold\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnormal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmeans_w\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvars_w\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msize\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mn_samples\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn_latent\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn_tasks\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32mmtrand.pyx\u001b[0m in \u001b[0;36mmtrand.RandomState.normal\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mmtrand.pyx\u001b[0m in \u001b[0;36mmtrand.cont2_array\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mValueError\u001b[0m: size is not compatible with inputs"
     ]
    }
   ],
   "source": [
    "# Alternative computation of NLPL for MT\n",
    "n_samples = 1\n",
    "intensity_sample = np.zeros((n_folds, n_samples, N_all, n_tasks))\n",
    "latent_fun_sample = np.zeros((n_folds, n_samples, N_all, n_latent))\n",
    "weights_sample = np.zeros((n_folds, n_samples, n_latent, n_tasks))\n",
    "nlpl_fold_task = np.zeros((n_folds, n_samples, n_tasks))\n",
    "first_std = np.zeros((n_folds, n_tasks))\n",
    "first_mean = np.zeros((n_folds, n_tasks))\n",
    "std = np.zeros(( n_tasks))\n",
    "mean = np.zeros((n_tasks))\n",
    "for fold in xrange(n_folds):\n",
    "    for task in xrange(n_tasks):\n",
    "        latent_means = latent_means_MT_Normal[fold]    \n",
    "        latent_vars = latent_vars_MT_Normal[fold]\n",
    "        means_w = means_w_MT_Normal[fold]\n",
    "        vars_w = vars_w_MT_Normal[fold]\n",
    "        np.random.seed(1)\n",
    "        latent_fun_sample[fold] = np.random.normal(latent_means, np.sqrt(latent_vars), size = (n_samples, N_all, n_latent)) \n",
    "        np.random.seed(2)\n",
    "        weights_sample[fold] = np.random.normal(means_w, np.sqrt(vars_w), size = (n_samples, n_latent, n_tasks))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "ename": "IndexError",
     "evalue": "index 1 is out of bounds for axis 0 with size 1",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mIndexError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-62-8bc69e631f07>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mfold\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mxrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_folds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      2\u001b[0m     \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mxrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_samples\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m         \u001b[0mintensity_sample\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfold\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtranspose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtranspose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mweights_sample\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfold\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtranspose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlatent_fun_sample\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfold\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0moffsets_MT_Normal\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfold\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mIndexError\u001b[0m: index 1 is out of bounds for axis 0 with size 1"
     ]
    }
   ],
   "source": [
    "for fold in xrange(n_folds):\n",
    "    for i in xrange(n_samples):\n",
    "        intensity_sample[fold, i] = np.exp(np.transpose(np.dot(np.transpose(weights_sample[fold, i]), np.transpose(latent_fun_sample[fold, i]))) + offsets_MT_Normal[fold])\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/virginia/.local/lib/python2.7/site-packages/numpy/core/_methods.py:140: RuntimeWarning: Degrees of freedom <= 0 for slice\n",
      "  keepdims=keepdims)\n",
      "/home/virginia/.local/lib/python2.7/site-packages/numpy/core/_methods.py:110: RuntimeWarning: invalid value encountered in true_divide\n",
      "  arrmean, rcount, out=arrmean, casting='unsafe', subok=False)\n",
      "/home/virginia/.local/lib/python2.7/site-packages/numpy/core/_methods.py:132: RuntimeWarning: invalid value encountered in double_scalars\n",
      "  ret = ret.dtype.type(ret / rcount)\n",
      "/home/virginia/.local/lib/python2.7/site-packages/numpy/core/fromnumeric.py:2920: RuntimeWarning: Mean of empty slice.\n",
      "  out=out, **kwargs)\n",
      "/home/virginia/.local/lib/python2.7/site-packages/numpy/core/_methods.py:85: RuntimeWarning: invalid value encountered in double_scalars\n",
      "  ret = ret.dtype.type(ret / rcount)\n",
      "/home/virginia/.local/lib/python2.7/site-packages/numpy/core/_methods.py:117: RuntimeWarning: invalid value encountered in subtract\n",
      "  x = asanyarray(arr - arrmean)\n"
     ]
    }
   ],
   "source": [
    "for fold in xrange(n_folds):\n",
    "    for i in xrange(n_samples):\n",
    "        for task in xrange(n_tasks):\n",
    "            fold_task_subset = data_final_with_na[fold,:,task+inputs_dimension]\n",
    "            #cond = np.isnan(fold_task_subset)\n",
    "\n",
    "            cond = np.logical_and(cell_inside, np.isnan(fold_task_subset).reshape(N,N)).reshape(N_all,1)[:,0]\n",
    "\n",
    "            true_counts =  outputs[cond,task]\n",
    "            pred_counts = intensity_sample[fold, i, :,task][cond]\n",
    "            if pred_counts.shape[0] == 0:\n",
    "                nlpl_fold_task[fold,i,task] = np.nan\n",
    "            else:\n",
    "                nlpl_fold_task[fold,i,task] = - np.sum(poisson.logpmf(true_counts, pred_counts))/pred_counts.shape[0]  \n",
    "\n",
    "for f in xrange(n_folds):\n",
    "    for t in xrange(n_tasks):\n",
    "#         print('f', f)\n",
    "#         print('t', t)\n",
    "        first_std[f,t] = np.std(nlpl_fold_task[f, :, t][~np.isnan(nlpl_fold_task[f, :, t])])\n",
    "#         print('first_std', first_std[f,t])\n",
    "        first_mean[f,t] = np.mean(nlpl_fold_task[f, :, t][~np.isnan(nlpl_fold_task[f, :, t])])\n",
    "#         print('first_mean', first_mean[f,t])\n",
    "        \n",
    "for t in xrange(n_tasks):\n",
    "    std[t] = np.std(first_mean[:,t][~np.isnan(first_mean[:,t])])/np.sqrt(n_folds)\n",
    "    mean[t] = np.mean(first_mean[:,t][~np.isnan(first_mean[:,t])])\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([nan, nan, nan, nan])"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "std"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([inf, inf, inf, inf])"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
